跳转至

Usercenter 模块 API

Usercenter 模块是 MyApps 平台的**用户中心共享库**(obpm-usercenter,jar 打包),为企业域内的用户、账户、部门、域、用户组、用户组集合、字段扩展、工作日历(标准日/特殊日)、媒体资源、同步日志等提供统一的数据持久化与查询能力。该模块**本身不可独立运行**——它作为一个 jar 被以下可部署单元加载,由宿主单元提供 Spring Boot 启动类、Servlet 容器与依赖注入容器:

  • obpm-usercenter-war(独立 WAR 部署,server.port=8080server.servlet.context-path=/usercenterspring.application.name=obpm-usercenter
  • obpm-usercenter-consul(独立 Spring Boot + Consul 注册中心部署,server.port=8088server.servlet.context-path=/usercenter
  • obpm-lite(统一打包部署,server.port=8888server.servlet.context-path=/,并在 application.yml 显式配置 myapps.context-path.usercenter=/usercenter

模块入口类均为 cn.myapps.run.UserCenterApp@ComponentScan(basePackages = {"cn.myapps.*.conf", "cn/myapps"}) + @EnableFeignClients(basePackages = {"cn.myapps.usercenter"})

服务与基址

部署形态 端口 context-path 控制器占位符解析 实际基址示例
obpm-usercenter-war(独立 WAR) 8080 /usercenter(来自 server.servlet.context-path ${myapps.context-path.usercenter:} 缺省为空 <host>:8080/usercenter/user
obpm-usercenter-consul(独立 + Consul) 8088 /usercenter(来自 server.servlet.context-path ${myapps.context-path.usercenter:} 缺省为空 <host>:8088/usercenter/user
obpm-lite(统一打包) 8888 /(来自 server.servlet.context-path myapps.context-path.usercenter=/usercenter(yml 显式) <host>:8888/usercenter/user

控制器类级 @RequestMapping 统一写作 ${myapps.context-path.usercenter:}/<resource>:独立部署下「占位符为空 + servlet context-path=/usercenter」,统一部署下「占位符=/usercenter + servlet context-path=/」,两种形态最终对外路径一致(均为 <host>/usercenter/<resource>)。

Usercenter 模块的 REST 基址并非统一的 /api/rest,而是按控制器分布在 ${myapps.context-path.usercenter:}/<resource>(如 /user/account/department 等)。详见各控制器文档。

鉴权说明

(据源码)usercenter 模块**自身不定义任何安全过滤器或鉴权拦截器**。模块内唯一的 @Configurationcn.myapps.usercenter.conf.UsercenterMvcConfig)仅注册一个 PersistenceHandlerInterceptor——用于在 postHandle 阶段提交 Hibernate 事务并关闭 Session(DAO 资源清理),preHandle 永远返回 true不做任何权限判断。usercenter 的 @ControllerAdvice/@ExceptionHandler 亦未定义。

usercenter 作为共享库被宿主服务加载后,会通过 @ComponentScan(basePackages = {"cn.myapps.*.conf", "cn/myapps"}) 拾取 obpm-common 提供的以下 Servlet Filter / WebMvc 配置(这些类位于 usercenter 的依赖 obpm-common 上):

  • CommWebMvcConfigcn.myapps.common.conf@Configuration):
  • filterRegistrationBeanPassFilter1(order=HIGHEST_PRECEDENCE):按硬编码 URL pattern 列表(//manager/signon/health/actuator/health*.js/*.css 等静态后缀、/api/rest/accessToken 等)命中的请求,标记 pass=true/static=true 放行。
  • filterRegistrationBeanCommonSecurityFilter1(order=-1,URL 模式 /*):注册 CommonSecurityFilter(见下)。
  • filterRegistrationBeanSecurityFilter1(order=1,URL 模式 /*):注册 Spring 的 HiddenHttpMethodFilter,允许 POST + _method=put/delete 表单参数转换为对应的 HTTP 方法(在 CommonSecurityFilter 之后执行)。
  • configureHandlerExceptionResolvers:注册全局异常处理器 CommonsExceptionResolver
  • CommonSecurityFiltercn.myapps.common.web):对 /user/** 等用户中心路径的实际影响仅限以下几条:
  • 系统间调用放行:携带合法 systemToken 请求头(JWT,HMAC256,issuer=auth0,claim username 固定为字符串 systemToken)的请求被标记 pass=true 直接放行,并绕过下述方法限制。这是 obpm-runtime/obpm-manager/obpm-kms 等宿主服务通过 Feign 调用 usercenter 时使用的鉴权方式。
  • HTTP 方法限制:未携带合法 systemToken 的请求,仅允许 GET/POST/HEAD/OPTIONSPUT/DELETE/PATCH 等被直接返回 HTTP 405Content-Type: text/html,无 JSON 体)。
  • 系统未就绪Environment.isReady() 为 false 时返回 HTTP 500(HTML 提示「系统正在启动中」)。
  • /swagger-ui、/v3/api-docs、/druid:需 designerTokenadminToken(开发者中心/管理控制台登录)。
  • /actuator/health 放开;/actuator/** 其他路径 HTTP 401

关键结论:usercenter 的控制器**不做用户级身份校验**(不读取 accessToken/adminToken/designerToken,控制器内也不取执行用户)。其访问控制完全依赖**网络层隔离与系统间 systemToken——这与其作为「内部数据面服务」的定位一致,终端用户**不直接访问 usercenter 接口,所有调用均来自可信内部服务经 Feign 触发。将 usercenter 暴露到公网而无前置网关/防火墙保护属严重配置错误。

完整鉴权机制与错误码说明见:顶层 index.md

统一响应结构

usercenter 模块的控制器不使用顶层 index.md 描述的统一 Resource 结构{errcode,errmsg,data,errors})。控制器方法返回类型直接序列化为 JSON:

  • 返回 void 的方法(创建/更新/删除/批量/状态变更等)成功时**响应体为空**(HTTP 200)。
  • 返回领域对象/集合/包装类型的方法(UserPOCollection<UserPO>DataPackage<UserPO>intCollection<String>List<String>Collection<UserDepartmentRoleSet> 等)成功时**直接序列化对象**,不包裹 errcode/errmsg/data/errors
  • 异常由 CommonsExceptionResolver(obpm-common)统一渲染为 HTTP 500,响应体仅含两字段:{"errcode":500,"errmsg":"<异常信息>"}OBPMValidateExceptiongetValidateMessage(),其余取 e.getMessage(),空消息时取「系统异常,请联系管理员!」)。

各控制器文档的「响应」小节会再次说明此约定。

错误码补充

usercenter 模块未引入专属业务错误码。鉴权层与异常层引入以下与统一 Resource 不同的纯 HTTP 状态码 / 简化 JSON 体:

errcode HTTP 含义
500 500 业务/系统异常(CommonsExceptionResolver 渲染,响应体 {"errcode":500,"errmsg":"<异常信息>"}仅两字段)。注:OBPMValidateExceptionerrmsggetValidateMessage()(如 {*[core.superuser.referenced]*} 占位符串,未做 i18n 解析)。
405 405 HTTP 方法不被允许(CommonSecurityFilter 拦截,仅允许 GET/POST/HEAD/OPTIONS;针对未携带 systemTokenPUT/DELETE/PATCH 等请求,返回 HTML 错误页,无 JSON 体
401 401 /actuator/**(非 /actuator/health)访问被拒(CommonSecurityFilter 直接设置状态码,无响应体)
500 500 系统启动中(CommonSecurityFilter 检测 !Environment.isReady(),返回 HTML 错误页)

注:控制器方法在事务 try/catch 内捕获异常后会回滚事务并 throw e 重新抛出,最终由 CommonsExceptionResolver 渲染为 HTTP 500 的简化 JSON 体(响应不含 data/errors 字段,与统一 Resource 不同)。

控制器清单

usercenter 模块共有约 13*APIController / *ApiController(用户、账户、部门、域、用户组、用户组集合、字段扩展、工作日历、媒体资源、同步日志、自定义用户字段、标准日/特殊日等),已全部覆盖。已文档化端点合计 118

文件 中文名 基址 端点数
user-api.md UserAPIController(用户管理 API) ${myapps.context-path.usercenter:}/user 32
department-api.md DepartmentAPIController(部门管理 API) ${myapps.context-path.usercenter:}/department 19
domain-api.md DomainAPIController(域管理 API) ${myapps.context-path.usercenter:}/domain 12
calendar-api.md CalendarAPIController(日历管理 API) ${myapps.context-path.usercenter:}/calendar 11
field-extends-api.md FieldExtendsAPIController(字段扩展管理 API) ${myapps.context-path.usercenter:}/fieldextends 10
user-group-set-api.md UserGroupSetAPIController(用户组集合管理 API) ${myapps.context-path.usercenter:}/usergroupset 6
user-group-api.md UserGroupAPIController(用户组管理 API) ${myapps.context-path.usercenter:}/usergroup 6
user-defined-api.md UserDefinedAPIController(用户自定义 API) ${myapps.context-path.usercenter:}/userdefined 5
standard-day-api.md StandardDayAPIController(标准工作日 API) ${myapps.context-path.usercenter:}/standardday 5
special-day-api.md SpecialDayAPIController(特殊日期 API) ${myapps.context-path.usercenter:}/specialday 5
media-api.md MediaApiController(媒体资源 API) ${myapps.context-path.usercenter:}/media 3
sync-log-api.md SyncLogAPIController(同步日志 API) ${myapps.context-path.usercenter:}/SyncLogPO 3
account-api.md AccountAPIController(账户 API) ${myapps.context-path.usercenter:}/account 1

覆盖状态

usercenter 模块下全部 *APIController / *ApiController(约 13 个、共 118 个端点)已全部覆盖,无待补控制器。