汤莹

内容研发

Showing 1 changed file with 123 additions and 0 deletions
## 内容研发实现
### 一 资源管理
1、jackrabbit库的启动(RepositoryStartup类)
>
* 首先启动入口为RepositoryStartup类, 首先会尝试获取到启动的配置文件,然后根据配置文件中库的位置(rep_home)以及库配置文件的位置(rep_config),启动对应的Repository。
* 其次将Repository注入到JackrabbitUtils与ServletContext等上下文中。
* 紧接着执行启动管道StartupPipeline, 管道上会安置一些启动阀门StartupValve,依次执行对应的Valve。StartupValve包含有FolderNodeTreeValve(目录节点树构造Valve), NodeRegisterValve(节点注册Valve,当需要调整节点Node时,需要调整resouces/nodetype/*.cnd文件结构, 然后启动的时候,会自动去调整节点结构),RmiSocketValve(socket远程调用线程池启动valve, 当开启Socket远程调用的时候,启动的时候需要启动对应的线程池)。
* 至此启动完成。
2、文件节点上传(ContentController.uploadsubmit)·
>
* 首先调用(ContentController.uploadFile)将文件上传到服务器的临时文件中,上传的时候会依次调用Tika模块中的TikaFilter链,分别为FileNameTikaFilter(文件名过滤,文件名不能以空格结尾例如“aaa .jpg”,因为这样会破坏跑课调用; 不能无文件后缀名),FileSizeTikaFilter(不允许空文件),CodeTikaFilter(文件编码格式的验证,视频视频码需要为h264,音频码为aac),ContentTypeTikaFilter(文件类型的验证)。只有当所有验证条件都通过之后,文件才能真正上传到服务器。
* 上传之后,需要调用ContentController.uploadsubmit进行提交,提交分为正常提交,覆盖提交,全部覆盖提交,跳过,等同于文件系统中文件修改操作中的覆盖跳过。提交的时候需要使用tika读取资源文件的相关属性, 然后将其保存到对应的节点属性中,最终将其保存。
3、远程调用RMI(RmiController.lookupResource)
>
* 调用/lookup/{restype}/{respath}接口,restype资源类型(包含image,audio,video),respath资源路径映射(见/resources/datamap/map.properties)。
* 根据资源类型, 映射到对应的查找规则(每种资源都有自己的查找规则),如果适配不到对应的规则,则返回404,提示“您所要查找的资源适配不到规则”。如果存在然后根据查找规则,资源名称查找到对应的节点,如果没搜索到对应的资源节点, 返回404,提示"您所要查找的资源xxx.jpg不存在"。
* 如果存在,则将md5、duration、extname属性设置到响应头中返回。
* 将文件流写入到Respose当中,与响应头一同返回。
4、节点搜索(QueryController.query())
>
* 表单提交查询条件到/query接口,表单对象QueryContentEntity会自动生成对应的sql2语句。
* 根据sql2语句进行查询,查询到NodeIterator之后需要进行简单分页。因为jackrabbit不支持limit语句,所以分页需要使用NodeIterator.skip的方式来辅助分页。具体方式为NodeIterator.skip((page+1)*pageSize), 然后NodeIterator迭代一页或者是到末尾,这样计算出一页的数据,封装到QueryContentEntity中返回.
5 节点框架(Node)
> 节点继承体系,继承父节点,同时会继承父节点的属性。例如在文件节点中添加md5属性,图片节点,视频节点,音频节点都具有md5属性。
>
|名称|属性|描述|继承自|
||||
|RootNode|根节点|所有节点的祖节点|无
|FileNode|文件节点|文件|RootNode
|FolderNode|文件夹节点|文件夹可以包含其他的节点|RootNode
|ImageNode|图片节点|图片|FileNode
|AudioNode|音频节点|音频|FileNode
|VideoNode|视频节点|视频|FileNode
6、系统工作原理
>
* 使用jcr协议对文件系统进行抽象, 使用jackrabbit进行节点管理,对外提供web页面进行内容管理与内容查询,同时提供接口供其他系统进行系统集成(例如跑课)。
* jackrabbit库包含节点注册(nodetype)、节点属性存储(debry)、节点文件存储(datastore),搜索引擎(lucence),权限管理(privileges),版本控制等等功能.
7、音频缓存重建
>
* 可以直接手动删除192.168.0.111(5)里面的"/资源/音频"中的缓存。
* 然后调用/resource/list/{type}接口,type为audio,即可。
## 4A内部认证
### 一、用户管理(Register)
> 1、用户添加
>
* 接口:/user
* method: POST
* 参数:
>
|名称|值|参数
|||
|username|用户名|
|password|密码|
|nickname|昵称|
|adminPassword|管理员密码|需要用管理员密码才能添加用户
2、用户修改密码
>
* 接口:/user
* method:PUT
* 参数:
>
|名称|值|参数
|||
|oldpassword|用户旧密码|
|newpassword|新密码|
|id|用户id|
3、删除用户
>
* 接口:/user
* method:DELETE
* 参数:id, adminPassword(管理员密码)
4、获取用户列表
>
* 接口:/user
* method:GET
* 参数:page=1&size=10
### 二、用户认证(Authentication)
> 1、用户登录
* 接口:/login
* method:POST
* 参数:
>
|名称|值|
|||
|username|用户名|
|password|密码|
> 2、token验证
* 接口:/validation_token
* method:PUT
* 参数:
>
|名称|值|
|||
|token|token|
|appCode|app编码|
> 3、注销
* 接口:/logout
* method:PUT
* 参数:access_token=xxxx
> 4、根据token获取用户id
* 接口:/userid
* method:GET
* 参数:access_token=xxxx
... ...