You need to sign in or sign up before continuing.
laoluo1.md 5.36 KB

内容研发实现

一 资源管理

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