From f221d4ce970a08d46c71eb9f8867cb67a5b5c541 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Fri, 6 Dec 2024 17:52:21 +0800 Subject: [PATCH] =?UTF-8?q?chore(oauth2):=20=E6=96=B0=E5=BB=BA=20`SaOAuth2?= =?UTF-8?q?ResourcesController.java`=20=E4=BB=A5=E6=9C=9F=E6=9B=B4?= =?UTF-8?q?=E7=AE=80=E5=8D=95=E6=98=8E=E4=BA=86=E7=9A=84=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=20OAuth2=20=E8=B5=84=E6=BA=90=E7=AB=AF=E6=90=AD=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth2/SaOAuth2ResourcesController.java | 51 +++++++++++++++++++ .../pj/oauth2/SaOAuth2ServerController.java | 30 +---------- 2 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ResourcesController.java diff --git a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ResourcesController.java b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ResourcesController.java new file mode 100644 index 00000000..82d9b3bc --- /dev/null +++ b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ResourcesController.java @@ -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 + * + *

Resources 端:OAuth2 资源端,允许 Client 端根据 Access-Token 置换相关资源

+ * + *

在 OAuth2 中,认证端和资源端: + * 1、可以在一个 Controller 中,也可以在不同的 Controller 中 + * 2、可以在同一个项目中,也可以在不同的项目中(在不同项目中时需要两端连同一个 Redis ) + *

+ * + * @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 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); + } + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java index fee73b06..afc5bd26 100644 --- a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java +++ b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java @@ -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 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); - } - }