2024-08-19 17:49:59 +08:00
|
|
|
|
# OAuth2 定制化登录页面
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1、如何自定义 OAuth-Server 端的登录视图?
|
|
|
|
|
|
|
|
|
|
重写 `cfg.notLoginView` 策略:
|
|
|
|
|
|
|
|
|
|
``` java
|
|
|
|
|
@Autowired
|
2024-08-23 16:18:24 +08:00
|
|
|
|
public void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
|
2024-08-19 17:49:59 +08:00
|
|
|
|
// 配置:未登录时返回的View
|
2024-08-23 16:18:24 +08:00
|
|
|
|
oauth2Server.notLoginView = ()->{
|
2024-08-19 17:49:59 +08:00
|
|
|
|
return new ModelAndView("xxx.html");
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在以上返回的视图中 ajax 方式调用 `/oauth2/doLogin` 接口,该接口接受以下参数:
|
|
|
|
|
|
|
|
|
|
| 参数 | 是否必填 | 说明 |
|
|
|
|
|
| :-------- | :-------- | :-------- |
|
|
|
|
|
| name | 否 | 账号 |
|
|
|
|
|
| pwd | 否 | 密码 |
|
|
|
|
|
|
|
|
|
|
接口返回值根据你重写的 `cfg.doLoginHandle` 策略进行自由决定。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 2、如何自定义登录API的接口地址?
|
|
|
|
|
根据需求点选择解决方案:
|
|
|
|
|
|
|
|
|
|
#### 2.1、如果只是想在 doLoginHandle 函数里获取除 name、pwd 以外的参数?
|
|
|
|
|
``` java
|
|
|
|
|
// 在任意代码处获取前端提交的参数
|
|
|
|
|
String xxx = SaHolder.getRequest().getParam("xxx");
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2.2、想完全自定义一个接口来接受前端登录请求?
|
|
|
|
|
``` java
|
|
|
|
|
// 直接定义一个拦截路由为 `/oauth2/doLogin` 的接口即可
|
|
|
|
|
@RequestMapping("/oauth2/doLogin")
|
|
|
|
|
public SaResult ss(String name, String pwd) {
|
|
|
|
|
System.out.println("------ 请求进入了自定义的API接口 ---------- ");
|
|
|
|
|
if("sa".equals(name) && "123456".equals(pwd)) {
|
|
|
|
|
StpUtil.login(10001);
|
|
|
|
|
return SaResult.ok("登录成功!");
|
|
|
|
|
}
|
|
|
|
|
return SaResult.error("登录失败!");
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2.3、不想使用`/oauth2/doLogin`这个接口,想自定义一个API地址?
|
|
|
|
|
|
|
|
|
|
答:直接在前端更改点击按钮时 Ajax 的请求地址即可
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 3、如何自定义 OAuth-Server 端的确认授权视图?
|
|
|
|
|
|
|
|
|
|
重写 `cfg.confirmView` 策略:
|
|
|
|
|
|
|
|
|
|
``` java
|
|
|
|
|
@Autowired
|
2024-08-23 16:18:24 +08:00
|
|
|
|
public void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
|
2024-08-19 17:49:59 +08:00
|
|
|
|
// 配置:授权确认视图
|
2024-08-23 16:18:24 +08:00
|
|
|
|
oauth2Server.confirmView = (clientId, scopes)->{
|
2024-08-19 17:49:59 +08:00
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
map.put("clientId", clientId);
|
|
|
|
|
map.put("scope", scopes);
|
|
|
|
|
return new ModelAndView("confirm.html", map);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在以上返回的视图中 ajax 方式调用 `/oauth2/doConfirm` 接口,即可完成授权,该接口接受以下参数:
|
|
|
|
|
|
|
|
|
|
| 参数 | 是否必填 | 说明 |
|
|
|
|
|
| :-------- | :-------- | :-------- |
|
|
|
|
|
| client_id | 是 | 应用 id |
|
|
|
|
|
| scope | 是 | 具体授予的权限,多个用逗号(或空格)隔开 |
|
|
|
|
|
|
|
|
|
|
接口返回值样例:
|
|
|
|
|
``` js
|
|
|
|
|
{
|
|
|
|
|
"code": 200,
|
|
|
|
|
"msg": "ok",
|
|
|
|
|
"data": null,
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|