LoginController(登录控制器)¶
cn.myapps.signon.auth.controller.LoginController,类级 @RequestMapping("${myapps.context-path.signon:}"),@Tag("登录控制器")。提供账号密码登录、SSO/CAS/OIDC 登录、微信/钉钉扫码登录、短信验证码登录与注册、代理用户登录、自动登录、企业域列表查询、多语言词列表、accessToken 换取与刷新、密码找回、首页重定向等认证端点。
控制器基址:
${myapps.context-path.signon:}(部署时替换;lite 统一打包下前缀多一层/signon)。下列「请求路径」为相对基址的路径。完整 URL ={signon-context}<相对路径>。鉴权:本控制器全部端点位于认证服务内,均不要求 accessToken。
/api/runtime/login/**命中PassFilter白名单;/conn_test、/、/api/login/exchangeAccessToken、/api/domains、/api/refreshAccessToken、logout/sso不在白名单,但CommonSecurityFilter不做 token 校验,仍可匿名访问。仅当部署方启用 CAS SSO 时,OBPMAuthenticationFilter会对未持 CAS 断言的请求重定向到 CAS 登录页(详见 index.md 鉴权说明)。响应形态:本控制器多数端点使用
result(...)自定义包装(resultCode/msg+ 动态数据键),getDomains使用success/error包装(status/message/data),部分端点返回原始JSONObject或 HTML/JS 字符串。各端点「响应」小节单独说明,不引用统一Resource。
1. 连接测试¶
返回固定 JSON 字符串,用于探活。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/conn_test(完整:{signon-context}/conn_test) - 鉴权:否
- Tag:登录控制器
请求参数¶
无。
请求示例¶
响应¶
结构:@ResponseBody 返回字符串,内容为固定 JSON 文本(Content-Type: text/plain 或 application/json,依协商)。
成功示例:
2. 首页重定向¶
根据 authentication.type 配置重定向到本地登录页或 SSO 登录页。
- 接口类型:页面视图(
@ResponseBody返回 HTML/JS 字符串) - 请求方式:
GET - 请求路径:
/(完整:{signon-context}/) - 鉴权:否
- Tag:登录控制器
请求参数¶
无。
请求示例¶
响应¶
结构:返回一段由浏览器执行的 JavaScript,将当前页面跳转到登录页或 SSO 授权端点。
- 当
authentication.type=sso且sso.implementation为 OIDC(OidcSSO)时:先从oidc.ldap.wellKnownUrl取authorization_endpoint,构造authorization_endpoint?response_type=code&client_id=<oidc.ldap.clientId>&redirect_uri=<sso.redirect>&scope=openid profile email,跳转到该 URL。 - 否则跳转到
login.html。 - 若计算出的 URL 未通过
SecurityURL.isSafeUrl安全校验,回退到login.html。
成功示例:
3. 换取 accessToken¶
根据 checkInToken 和 domainId 或 domainName 换取正式 accessToken。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/login/exchangeAccessToken(完整:{signon-context}/api/login/exchangeAccessToken) - 鉴权:否(需持有效的
checkInToken,由checkin端点签发) - Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| requestBody | body | JSON string | 是 | 请求体为 JSON 字符串,控制器内再解析 |
请求体字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| checkInToken | string | 是 | checkin 端点签发的中间令牌,JWT 内 username:domainIds |
| domainId | string | 二选一 | 企业域 ID |
| domainName | string | 二选一 | 企业域名称 |
请求示例¶
POST /api/login/exchangeAccessToken HTTP/1.1
Content-Type: application/json
{"checkInToken":"<jwt>","domainName":"默认域"}
响应¶
结构:result(...) 自定义包装。
成功示例:
失败示例:
4. SSO 登录处理¶
处理 SSO 单点登录回调,校验 SSO 票据并签发 accessToken,写入 cookie 后跳转到分发页。
- 接口类型:页面视图(
@ResponseBody返回 HTML/JS 字符串) - 请求方式:
GET - 请求路径:
/api/login/sso(完整:{signon-context}/api/login/sso) - 鉴权:否
- Tag:登录控制器
请求参数¶
由 SSO 实现回调时携带(如 CAS ticket、OIDC code 等),具体参数由 SSOUtil.checkSSO 解析。
请求示例¶
响应¶
结构:HTML/JS 字符串。
- 当
authentication.type != sso时,服务端response.sendRedirect("login.html")(无响应体)。 - 当 SSO 校验成功(
userinfo形如<loginno>@<domainName>,loginno可含#前缀),签发 accessToken 并通过Set-Cookie: accessToken=<jwt>下发,返回跳转脚本。 - 失败返回字符串
error。
成功示例:
Set-Cookie: accessToken=<jwt>; Path=/; HttpOnly
<script>window.location='/static/signon/dispatcher.html'</script>
5. SSO 注销¶
注销当前登录态并跳转到 SSO 注销重定向地址。
- 接口类型:页面视图(
@ResponseBody返回 HTML/JS 字符串) - 请求方式:
POST - 请求路径:
logout/sso(完整:{signon-context}/logout/sso;方法级@PostMapping("logout/sso")无前导斜杠) - 鉴权:否
- Tag:登录控制器
请求参数¶
无。
请求示例¶
响应¶
结构:HTML/JS 字符串。先调 LoginHelper.logout 失效 session、清空 cookie,再读取 sso.logout.redirect 配置,若未通过 SecurityURL.isSafeUrl 校验则回退 login.html,返回跳转脚本。
成功示例:
6. 获取代理用户列表¶
获取指定用户 ID 的代理用户列表(仅返回代理日期有效内的代理人)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/getProxyUsers/{userid}(完整:{signon-context}/api/runtime/login/getProxyUsers/{userid}) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userid | path | string | 是 | 被代理的用户 ID |
请求示例¶
响应¶
结构:result(...) 自定义包装。proxyUsers 为对象数组,元素仅含 id/name/avatar 三个字段。
成功示例:
{
"resultCode": "0",
"msg": "",
"returnUrl": "",
"proxyUsers": [
{ "id": "<用户ID>", "name": "<用户名>", "avatar": "<头像URL>" }
]
}
7. 代理用户登录¶
以代理用户身份登录系统,签发该代理用户的 accessToken。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/loginProxy/{userid}/{path}(完整:{signon-context}/api/runtime/login/loginProxy/{userid}/{path}) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userid | path | string | 是 | 代理用户 ID(代理人本人) |
| path | path | string | 是 | 登录后跳转的应用上下文路径 |
请求示例¶
响应¶
结构:result(...) 自定义包装。成功时通过 Set-Cookie: accessToken=<jwt> 下发。
成功示例:
失败示例:
8. 更改验证码图片¶
生成新的验证码图片(base64),并把校验码写入登录缓存。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/changeCheckcodeImg(完整:{signon-context}/api/runtime/login/changeCheckcodeImg) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| username | query | string | 是 | 账号名;作为缓存 key 区分用户的验证码 |
请求示例¶
响应¶
结构:result(...) 自定义包装。checkcode 为 data:image/jpg;base64,... 形式的图片。
成功示例:
9. 自动登录¶
依据 cookie 中的自动登录票据尝试自动登录。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/autologin(完整:{signon-context}/api/runtime/login/autologin) - 鉴权:否(依赖
CookieAuthValidator校验 cookie 票据) - Tag:登录控制器
请求参数¶
无(从请求 cookie 中读取自动登录票据)。
请求示例¶
响应¶
结构:result(...) 自定义包装。成功时通过 Set-Cookie: accessToken=<jwt> 下发,并把账号记入登录缓存(标记 0)。
成功示例:
失败示例:
10. 获取微信配置¶
获取指定企业域的微信扫码登录配置。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/getwxconfig(完整:{signon-context}/api/runtime/login/getwxconfig) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainName | query | string | 是 | 企业域名称(@RequestParam) |
请求示例¶
响应¶
结构:原始 JSONObject(无外层包装),字段来自 Domain 实体。
成功示例:
11. 获取钉钉配置¶
获取指定企业域的钉钉扫码登录配置。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/getddconfig(完整:{signon-context}/api/runtime/login/getddconfig) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainName | query | string | 是 | 企业域名称(@RequestParam) |
请求示例¶
响应¶
结构:原始 JSONObject(无外层包装)。
成功示例:
12. 微信扫码登录回调¶
处理微信扫码登录的回调请求,用授权码换取用户身份后签发 accessToken。
- 接口类型:页面视图(
@ResponseBody返回 HTML/JS 字符串) - 请求方式:
GET - 请求路径:
/api/runtime/login/wxqrcodelogin(完整:{signon-context}/api/runtime/login/wxqrcodelogin) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| code | query | string | 是 | 微信授权码(@RequestParam) |
| state | query | string | 是 | 状态参数,格式为 <contentPath>@<domainName>(@RequestParam) |
请求示例¶
响应¶
结构:HTML/JS 字符串。成功时通过 Set-Cookie: accessToken=<jwt> 下发并跳转到分发页。
成功示例:
Set-Cookie: accessToken=<jwt>; Path=/; HttpOnly
<script>window.location='/static/signon/dispatcher.html'</script>
失败时由
IOException抛出,经全局异常解析器处理(无统一Resource体)。
13. 钉钉扫码登录回调¶
处理钉钉扫码登录的回调请求,用授权码换取用户身份后签发 accessToken。
- 接口类型:页面视图(
@ResponseBody返回 HTML/JS 字符串) - 请求方式:
GET - 请求路径:
/api/runtime/login/ddqrcodelogin(完整:{signon-context}/api/runtime/login/ddqrcodelogin) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| code | query | string | 是 | 钉钉授权码(@RequestParam) |
| state | query | string | 是 | 状态参数,格式为 <contentPath>@<appId>(@RequestParam) |
请求示例¶
响应¶
结构:HTML/JS 字符串。成功时通过 Set-Cookie: accessToken=<jwt> 下发并跳转到分发页;任何异常或未匹配用户时返回字符串 error。
成功示例:
Set-Cookie: accessToken=<jwt>; Path=/; HttpOnly
<script>window.location='/static/signon/dispatcher.html'</script>
失败示例:
14. 获取会话密钥¶
获取微信小程序会话密钥(jscode2session)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/getsessionkey(完整:{signon-context}/api/runtime/login/getsessionkey) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| code | query | string | 是 | 微信小程序 wx.login 返回的临时 code(@RequestParam) |
注:当前实现硬编码
appId=wx0430f353e725a806、secret=7831a6cc7a304132f6bae24d32e64b47,未做配置化。
请求示例¶
响应¶
结构:原始 JSONObject(无外层包装),透传 WeixinUtil.getSessionKey(...) 返回值(含 session_key、openid 等字段)。
成功示例:
15. 获取域列表(旧) @Deprecated¶
获取系统中的企业域列表及登录页背景、密码加密模式等配置。已废弃,建议改用 16. 获取域列表。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/getDomainList(完整:{signon-context}/api/runtime/login/getDomainList) - 鉴权:否
- Tag:登录控制器
请求参数¶
无。
请求示例¶
响应¶
结构:result(...) 自定义包装。result 为对象,含:
| 字段 | 类型 | 说明 |
|---|---|---|
| domainList | string[] | 企业域名称列表,元素形如 <域名>@<0\|1\|2\|3>(后缀 0=无扫码配置,1=仅微信,2=仅钉钉,3=两者皆有) |
| loginBackground | string | 登录页背景图路径(取自 sso.properties 的 login.background) |
| encryptionMode | int | 密码加密模式(取自 passwordLegal 的 ao.login.password.encryption.mode,缺省 0) |
成功示例:
{
"resultCode": "1",
"msg": "成功",
"result": {
"domainList": ["默认域@0"],
"loginBackground": "/uploads/login.png",
"encryptionMode": 0
}
}
失败示例:
16. 获取域列表¶
获取系统中所有启用(status=1)的企业域。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/domains(完整:{signon-context}/api/domains) - 鉴权:否
- Tag:登录控制器
请求参数¶
无。
请求示例¶
响应¶
结构:success/error 自定义包装(status/message/data),data 为 Domain 实体集合。注意错误时 status 仍为 0,错误信息走 message 与 data。
成功示例:
{
"status": 0,
"message": "ok",
"data": [
{ "id": "<域ID>", "name": "默认域", "status": 1, "...": "..." }
]
}
失败示例:
17. 获取多语言词列表¶
获取登录页面所需的多语言翻译,并把语言偏好写入 cookie。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/getMultiLangWordList(完整:{signon-context}/api/runtime/login/getMultiLangWordList) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| language | body | string | 是 | 语言标识(如 zh_CN、en),位于 @RequestBody JSONObject 的 language 字段 |
请求示例¶
POST /api/runtime/login/getMultiLangWordList HTTP/1.1
Content-Type: application/json
{"language":"zh_CN"}
响应¶
结构:result(...) 自定义包装。multiLangWordMap 含登录页所需词条(domains、pageLoginAccount、pageLoginPassword、pageLoginRememberLabel、login、frontPageLoginCopyright、mobile、code、getCode、loginway)。当 language 通过 SecurityURL.simpleSpecialSymbols 校验时,会同时下发 Set-Cookie: USERLANGUAGE=<language>。
成功示例:
{
"resultCode": "1",
"msg": "成功",
"multiLangWordList": { "domains": "企业域", "login": "登录", "...": "..." }
}
失败示例:
18. 用户登录(第一步:账号校验)¶
校验账号密码与(必要时)验证码,签发 60 秒有效的中间令牌 checkInToken,返回该账号可登录的企业域列表。后续需调用 19. 用户登录 完成登录。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/checkin(完整:{signon-context}/api/runtime/login/checkin) - 鉴权:否
- Tag:登录控制器
请求参数¶
请求体(@RequestBody JSONObject):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 账号名或手机号 |
| password | string | 是 | 密码(前端做轻量混淆:末两位挪到前面再 BASE64 解码) |
| checkcode | string | 否 | 图形验证码;累计失败超 2 次后必填 |
请求示例¶
POST /api/runtime/login/checkin HTTP/1.1
Content-Type: application/json
{"username":"admin","password":"<混淆后密码>","checkcode":"ab12"}
响应¶
结构:result(...) 自定义包装。返回的业务码与场景:
| resultCode | 场景 | 说明 |
|---|---|---|
1 |
登录成功 | msg=「登录成功」,domains 为可选企业域列表;同时 Set-Cookie: checkInToken=<jwt>; Max-Age=60 |
0 |
账号锁定 / 失效 / 密码错误 / 验证码错误 / 用户不存在 | msg 为对应多语言提示;当需要验证码时附带 checkcodeImg(base64 图片) |
7 |
密码已过期 | msg=「密码已过期」,附带 code(重置用临时 token)与 checkcodeImg |
成功示例:
HTTP/1.1 200 OK
Set-Cookie: checkInToken=<jwt>; Path=/; Max-Age=60
{ "resultCode": "1", "msg": "登录成功", "domains": [ { "id": "<域ID>", "name": "默认域", "status": 1 } ] }
失败示例(密码错误):
{ "resultCode": "0", "msg": "用户名或密码不正确", "returnUrl": "", "checkcodeImg": "data:image/jpg;base64,..." }
失败示例(账号锁定):
{ "resultCode": "0", "msg": "该账号已锁定", "returnUrl": "", "checkcodeImg": "data:image/jpg;base64,..." }
失败示例(密码过期):
{ "resultCode": "7", "msg": "密码已过期", "code": "<重置临时token>", "checkcodeImg": "data:image/jpg;base64,..." }
控制器从
passwordLegal读取ao.login.fail.maxtimes,超限时把账号lockflag置为 0(锁定)并提示锁定;登录成功后重置失败计数与验证码缓存(缓存后端为 SpringCacheManager,key 前缀SIGNON_LOGIN_CACHE_KEY)。
19. 用户登录(第二步:选择域并签发 accessToken)¶
校验 checkInToken cookie 与所选企业域,签发 accessToken 并下发 cookie,返回登录后跳转 URL。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/signin(完整:{signon-context}/api/runtime/login/signin) - 鉴权:否(依赖
checkInTokencookie,由18. 用户登录签发) - Tag:登录控制器
请求参数¶
请求体(@RequestBody JSONObject):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userDomainName | string | 是 | 形如 <username>@@<domainName> |
| remember | string | 是 | 0=不记住,其他=记住登录(写入自动登录票据 cookie) |
| url | string | 否 | 登录前原始访问 URL,影响 returnUrl |
| path | string | 否 | 应用上下文路径,作为 url 缺省时计算 returnUrl 的依据 |
请求示例¶
POST /api/runtime/login/signin HTTP/1.1
Content-Type: application/json
Cookie: checkInToken=<jwt>
{"userDomainName":"admin@@默认域","remember":"1","url":null,"path":"portal"}
响应¶
结构:result(...) 自定义包装。
| resultCode | 场景 | 说明 |
|---|---|---|
0 |
checkInToken cookie 缺失或与请求用户名不匹配 |
msg=「登录已失效,请重新登录」/「错误」 |
1 |
登录成功 / 代理登录页面 | returnUrl 为登录后跳转地址(PC 为 /signon/dispatcher.html,移动端为 /mobile/index.html#/?accessToken=<jwt>,代理人为 /signon/agent.html?url=...&id=...),同时下发 accessToken 与 isFromLogin 两个 cookie |
成功示例:
HTTP/1.1 200 OK
Set-Cookie: accessToken=<jwt>; Path=/; HttpOnly
Set-Cookie: isFromLogin=1; Path=/
{ "resultCode": "1", "msg": "登录成功", "returnUrl": "/signon/dispatcher.html", "checkcodeImg": "", "accessToken": "<jwt>" }
失败示例:
20. 获取用户所属企业域¶
基于 checkInToken cookie 返回该用户可登录的企业域(带 Logo)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/domains(完整:{signon-context}/api/runtime/login/domains) - 鉴权:否(依赖
checkInTokencookie) - Tag:登录控制器
请求参数¶
无(从请求 cookie 中读取 checkInToken)。
请求示例¶
响应¶
结构:result(...) 自定义包装。domains 为 Domain 实体列表(仅 status=1,并对 logoUrl 做相对路径裁剪)。
成功示例:
{
"resultCode": "1",
"msg": "成功!",
"domains": [ { "id": "<域ID>", "name": "默认域", "logoUrl": "/uploads/logo.png" } ]
}
失败示例:
21. 短信验证码发送¶
向指定手机号发送短信验证码并返回过期时间。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/runtime/login/smsauth(完整:{signon-context}/api/runtime/login/smsauth) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| telephone | query | string | 是 | 手机号 |
| domainName | query | string | 否 | 企业域名称(控制器未强校验,仅声明) |
注:源码中两参数均为裸
String(无@RequestParam),按 Spring MVC 默认行为作为必填请求参数处理。
请求示例¶
响应¶
结构:result(...) 自定义包装。校验码写入 session(smsCheckCode),短信通过云服务接口(Environment.getYunServiceCallUrl())下发。timeout 为过期时间(秒),取自 AuthConfig.SMS_TIMEOUT。
成功示例:
失败示例:
22. 短信验证码登录¶
使用短信验证码进行登录。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/loginSMS(完整:{signon-context}/api/runtime/login/loginSMS) - 鉴权:否
- Tag:登录控制器
请求参数¶
请求体(@RequestBody JSONObject):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| telephone | string | 是 | 手机号 |
| smsCheckCode | string | 是 | 短信验证码(与 session 内 smsCheckCode 比对) |
| path | string | 否 | 应用上下文路径(缺省由 getWarContextPath("portal") 推断) |
请求示例¶
POST /api/runtime/login/loginSMS HTTP/1.1
Content-Type: application/json
{"telephone":"13800000000","smsCheckCode":"12345","path":"portal"}
响应¶
结构:result(...) 自定义包装。
- 单域用户:直接签发 accessToken,
Set-Cookie: accessToken=<jwt>,returnUrl=/signon/dispatcher.html。 - 多域用户:返回中间跳转页
/signon/domain.html?...&checkInToken=<jwt>,由用户选域后再走19. 用户登录。 - 验证码错误或用户不存在:
resultCode=0。
成功示例(单域):
HTTP/1.1 200 OK
Set-Cookie: accessToken=<jwt>; Path=/; HttpOnly
{ "resultCode": "1", "msg": "登录成功!", "returnUrl": "/signon/dispatcher.html", "checkcodeImg": "", "accessToken": "<jwt>" }
失败示例:
{ "resultCode": "0", "msg": "手机验证码校验失败!", "returnUrl": "./smsAuth.html?telephone=13800000000&domainName=", "checkcodeImg": "", "accessToken": "" }
23. 用户注册¶
新用户注册(手机号 + 短信验证码 + 选域)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/register(完整:{signon-context}/api/runtime/login/register) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| telephone | query | string | 是 | 手机号(同时作为账号) |
| username | query | string | 是 | 用户名 |
| password | query | string | 是 | 密码 |
| smsCheckCode | query | string | 是 | 短信验证码(与 session 内 smsCheckCode 比对) |
| domainName | query | string | 是 | 企业域名称 |
注:以上均为裸
String(无@RequestParam),按 Spring MVC 默认作为必填请求参数处理。是否开启注册由SignonConfig加载的login.open.userregister控制(须为"true")。
请求示例¶
POST /api/runtime/login/register?telephone=13800000000&username=alice&password=secret&smsCheckCode=12345&domainName=默认域 HTTP/1.1
响应¶
结构:result(...) 自定义包装。成功时由 runtime Feign(RuntimeFeignService.doregisterUser)落库并返回 token,通过 Set-Cookie: accessToken=<jwt>; Max-Age=7200 与 Set-Cookie: isFromLogin=1 下发。
成功示例:
HTTP/1.1 200 OK
Set-Cookie: accessToken=<jwt>; Path=/; Max-Age=7200
Set-Cookie: isFromLogin=1; Path=/
{ "resultCode": "1", "msg": "ok", "url": "/portal/vue/index.html#" }
失败示例:
24. 找回密码¶
通过短信验证码找回密码(重置为默认密码 123456)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/api/runtime/login/retrievePassword(完整:{signon-context}/api/runtime/login/retrievePassword) - 鉴权:否
- Tag:登录控制器
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| telephone | query | string | 是 | 手机号 |
| smsCheckCode | query | string | 是 | 短信验证码 |
注:以上均为裸
String(无@RequestParam),按 Spring MVC 默认作为必填请求参数处理。是否开启找回密码由login.open.retrievepassword控制(须为"true")。
请求示例¶
响应¶
结构:result(...) 自定义包装。重置由 runtime Feign(RuntimeFeignService.retrievePassword)完成,新密码固定为 123456,msg 拼接默认密码。
成功示例:
失败示例:
25. 刷新 accessToken¶
凭当前请求内携带的 accessToken 换取新的 accessToken。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/api/refreshAccessToken(完整:{signon-context}/api/refreshAccessToken) - 鉴权:否(控制器内调用
Security.getUserIdFromToken(request)解析当前 token,失败时返回的 userId 可能为 null,进而由Security.generateToken处理) - Tag:登录控制器
请求参数¶
无显式参数;从请求中按 Security.getUserIdFromToken 顺序(query accessToken → query access_token → 请求头 accessToken → Cookie accessToken → Authorization: Bearer)解析当前用户 ID。
请求示例¶
响应¶
结构:result(...) 自定义包装。
成功示例: