跳转至

AccountAPIController(账户 API)

用户中心模块的账户(登录账号)查询控制器,提供按登录名查询账户信息的能力。账户(AccountPO)独立于用户(UserPO)存在,承载登录凭证与联系方式等字段,与用户为一对一或一对多关联。该控制器由宿主服务以 Feign 方式内部调用(AccountAPI 接口),用于登录校验、账户找回等场景,属于后端服务间数据面接口。

  • 控制器全限定名cn.myapps.usercenter.controller.AccountAPIController
  • 接口(Feign 契约)cn.myapps.usercenter.controller.AccountAPI
  • Tag:账户管理
  • 类级 @RequestMapping${myapps.context-path.usercenter:}/account
  • 基址<host>/usercenter/account
  • 独立部署(obpm-usercenter-war/obpm-usercenter-consul):server.servlet.context-path=/usercenter,占位符 ${myapps.context-path.usercenter:} 缺省为空,故实际基址为 <host>:<port>/usercenter/account(war 端口 8080,consul 端口 8088)。
  • 统一部署(obpm-lite):server.servlet.context-path=/,yml 显式配置 myapps.context-path.usercenter=/usercenter,故实际基址同样为 <host>:8888/usercenter/account
  • 接口类型:REST 资源

公共说明

鉴权

(据源码)usercenter 模块本身**不定义**任何安全过滤器或鉴权拦截器,仅注册 PersistenceHandlerInterceptor(用于 DAO 资源清理——事务提交与 Hibernate Session 关闭,不做权限判断)。本控制器 /account/** 路径下所有端点**不做用户级身份校验**——既不读取 accessToken,也不读取 adminToken/designerToken,控制器方法内也不调用任何 getUser() 之类方法。

usercenter 作为共享库被宿主服务加载后,会继承 obpm-common 提供的 CommonSecurityFilter(由 CommWebMvcConfig@Bean 注册,URL 模式 /*,order=-1,详见 index.md「鉴权说明」),对 /account/** 的影响仅限:

  • HTTP 方法限制:未携带合法 systemToken 请求头时,仅允许 GET/POST/HEAD/OPTIONS 方法;直接发起 PUT/DELETE/PATCH 等请求会被 CommonSecurityFilter 以 HTTP 405(HTML 错误页,无 JSON 体)拒绝。本控制器仅暴露 GET 端点,故该限制对调用方无实际影响。
  • systemToken 放行:携带合法 systemToken 请求头(系统间 Feign 调用,JWT 内 username 固定为 systemToken)的请求被标记 pass=true 并绕过上述方法限制。

结论:本控制器的真实访问控制依赖**网络层隔离**(仅由可信的内部服务经 Feign 调用,附 systemToken 请求头),并非用户令牌。终端用户不应直接访问这些端点。注意:账户信息含 loginpwd(密码)等敏感字段,对外暴露前须由调用方做必要脱敏。

响应结构

本控制器不使用统一 Resource 结构(与 ../index.md「统一响应结构」不同)。响应遵循以下规则:

情形 HTTP 状态 响应体
返回领域对象的方法(findByLoginno)成功 200 直接序列化的 AccountPO JSON不包裹 errcode/errmsg/data/errors;若登录名不存在,返回 null(裸 null
业务/系统异常 500 {"errcode":500,"errmsg":"<异常信息>"}(由 obpm-common 的 CommonsExceptionResolver 全局异常处理器渲染,仅含 errcode/errmsg 两字段,无 data/errors
系统启动中 500 HTML 错误页(由 CommonSecurityFilter 直接返回)

数据模型:AccountPO

cn.myapps.usercenter.dao.account.AccountPO 继承自 AuthtimeValueObject,表示一个登录账号实体。主要字段:id(主键)、loginno(登录账号)、loginpwd(密码,敏感字段)、email(电子邮箱)、telephone(手机号 1)、telephone2(手机号 2)、isFirstLogin(是否首次登录,boolean,默认 false),以及来自父类的通用字段。该实体与 UserPO 通过 loginno 关联——一个登录账号可对应多个企业域下的多个用户。


1. 根据登录名查询账户

根据登录账号(loginno)查询账户信息。返回的 AccountPO 含密码、邮箱、手机号等敏感字段,调用方须自行脱敏。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/findByLoginno(完整:<host>/usercenter/account/findByLoginno
  • 鉴权:内部
  • Tag:账户管理

请求参数

参数名 位置 类型 必填 说明
loginno query string 登录账号

请求示例

GET /usercenter/account/findByLoginno?loginno=zhangsan HTTP/1.1
systemToken: <系统间 JWT>

响应

结构:成功为 AccountPO 对象 JSON(不包裹 Resource);登录名不存在时返回裸 null

成功示例

{
  "id": "__ACC001",
  "loginno": "zhangsan",
  "loginpwd": "<密码密文>",
  "email": "zhangsan@example.com",
  "telephone": "13800000000",
  "telephone2": "",
  "isFirstLogin": false
}

未命中示例

null

失败示例

{ "errcode": 500, "errmsg": "<异常信息>" }