chore(oauth2): 新建 SaOAuth2ResourcesController.java 以期更简单明了的展示 OAuth2 资源端搭建

This commit is contained in:
click33 2024-12-06 17:52:21 +08:00
parent 2bb45214d0
commit f221d4ce97
2 changed files with 52 additions and 29 deletions

View File

@ -0,0 +1,51 @@
package com.pj.oauth2;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.oauth2.SaOAuth2Manager;
import cn.dev33.satoken.oauth2.template.SaOAuth2Util;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Sa-Token OAuth2 Resources Controller
*
* <p> Resources OAuth2 资源端允许 Client 端根据 Access-Token 置换相关资源 </p>
*
* <p> OAuth2 认证端和资源端
* 1可以在一个 Controller 也可以在不同的 Controller
* 2可以在同一个项目中也可以在不同的项目中在不同项目中时需要两端连同一个 Redis
* </p>
*
* @author click33
* @since 2024/12/6
*/
@RestController
public class SaOAuth2ResourcesController {
// 示例获取 userinfo 信息昵称头像性别等等
@RequestMapping("/oauth2/userinfo")
public SaResult userinfo() {
// 获取 Access-Token 对应的账号id
String accessToken = SaOAuth2Manager.getDataResolver().readAccessToken(SaHolder.getRequest());
Object loginId = SaOAuth2Util.getLoginIdByAccessToken(accessToken);
System.out.println("-------- 此Access-Token对应的账号id: " + loginId);
// 校验 Access-Token 是否具有权限: userinfo
SaOAuth2Util.checkAccessTokenScope(accessToken, "userinfo");
// 模拟账号信息 真实环境需要查询数据库获取信息
Map<String, Object> map = new LinkedHashMap<>();
// map.put("userId", loginId); 一般原则下oauth2-server 不能把 userId 返回给 oauth2-client
map.put("nickname", "林小林");
map.put("avatar", "http://xxx.com/1.jpg");
map.put("age", "18");
map.put("sex", "");
map.put("address", "山东省 青岛市 城阳区");
return SaResult.ok().setMap(map);
}
}

View File

@ -1,10 +1,8 @@
package com.pj.oauth2;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.oauth2.SaOAuth2Manager;
import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig;
import cn.dev33.satoken.oauth2.processor.SaOAuth2ServerProcessor;
import cn.dev33.satoken.oauth2.template.SaOAuth2Util;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,11 +11,10 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Sa-Token-OAuth2 Server Controller
* Sa-Token-OAuth2 Server 认证 Controller
*
* @author click33
*/
@ -58,29 +55,4 @@ public class SaOAuth2ServerController {
}
// ---------- 开放相关资源接口 Client端根据 Access-Token 置换相关资源 ------------
// 获取 userinfo 信息昵称头像性别等等
@RequestMapping("/oauth2/userinfo")
public SaResult userinfo() {
// 获取 Access-Token 对应的账号id
String accessToken = SaOAuth2Manager.getDataResolver().readAccessToken(SaHolder.getRequest());
Object loginId = SaOAuth2Util.getLoginIdByAccessToken(accessToken);
System.out.println("-------- 此Access-Token对应的账号id: " + loginId);
// 校验 Access-Token 是否具有权限: userinfo
SaOAuth2Util.checkAccessTokenScope(accessToken, "userinfo");
// 模拟账号信息 真实环境需要查询数据库获取信息
Map<String, Object> map = new LinkedHashMap<>();
// map.put("userId", loginId); 一般原则下oauth2-server 不能把 userId 返回给 oauth2-client
map.put("nickname", "林小林");
map.put("avatar", "http://xxx.com/1.jpg");
map.put("age", "18");
map.put("sex", "");
map.put("address", "山东省 青岛市 城阳区");
return SaResult.ok().setMap(map);
}
}