springcloud集成Oauth2权限项目-网关校验access_token的正确性才能访问接口(十一)

现在任何连接都要经过网关,所以在网关校验access_token的正确性,当access_token正确后,才转发到相应的服务。

当获取access_token后,每次前端访问都要带上这个access_token。

依次启动服务,eureka---->user------>oauth---------->zull顺序启动服务

现在我们访问127.0.0.1:9999/user/hello 这个接口

到现在为止无论带不带access_token都可以访问这个接口,并返回结果。显然这不是我想要的。

所以接下来要改造,只有携带了access_token,并且正确后才能访问这个接口。

在网关zuul加入oauth2的包

<!--oauth-->
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.3.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
        </dependency>

然后添加配置类ResourceServerConfiguration.ja

<think>好的,我需要帮助用户将SaTokenOAuth2集成到RuoyiCloudPlus项目中。首先,我得回忆一下这两个框架的基本情况。 RuoyiCloudPlus是基于Spring Cloud的微服务框架,提供了一套权限管理系统,可能用的是自带的权限模块。而SaToken是一个轻量级的Java权限认证框架,支持OAuth2协议。用户的目标是集成SaTokenOAuth2功能,可能想替代原有的权限模块或者增加OAuth2的支持。 首先,我得确定RuoyiCloudPlus的当前权限实现方式。如果它使用的是Spring Security,可能需要调整配置,避免冲突。不过根据经验,Ruoyi系列通常有自己的权限模块,可能基于Shiro或者自定义拦截器。需要查看文档或代码确认。 接下来,集成SaToken的步骤大致包括添加依赖、配置OAuth2参数、编写认证逻辑、定义路由拦截和回调处理。需要确保SaToken的版本与项目兼容,同时检查Spring Boot和Cloud的版本是否支持。 添加依赖时,要在pom.xml中加入sa-token-oauth2的starter。可能还需要其他相关依赖,比如sa-token-redis如果用到分布式会话。然后,在配置文件中设置OAuth2的client-id、client-secret、授权模式等参数,这些需要根据具体的OAuth2服务提供商(比如GitHub、微信)来填写。 认证逻辑部分,需要实现SaToken的StpInterface,来加载用户的权限和角色。RuoyiCloudPlus本身的用户体系可能需要适配,比如从数据库查询用户信息,并转换为SaToken需要的权限列表。这一步可能需要修改现有的UserDetailsService或类似的组件。 路由拦截方面,SaToken通过注解或路由配置进行权限控制。在RuoyiCloudPlus中,原有的权限拦截器可能需要调整,替换为SaToken的拦截器。比如,在网关模块添加全局过滤器,校验Token的有效性,并转发用户信息到下游服务。 回调处理指的是OAuth2授权后的回调URL,需要处理授权码,获取access token,并创建本地会话。SaToken提供了简化这一过程的接口,可能需要编写一个Controller来处理回调,调用Auth2Request进行登录。 可能遇到的坑包括依赖冲突、配置项遗漏、权限数据不一致、回调URL配置错误等。比如,SaToken的自动配置可能需要排除某些Spring Security的自动配置类,或者调整拦截路径的顺序。 另外,需要注意OAuth2的授权流程,比如授权码模式需要前端跳转到认证服务器,后端处理回调。测试时需要确保HTTPS环境,因为很多OAuth2服务要求回调URL是安全的。 最后,需要验证集成后的功能,比如用户通过OAuth2登录后,能否正确获取权限访问受保护的接口。同时检查原有的权限功能是否受到影响,确保兼容性。 总结下来,步骤是:添加依赖→配置参数→适配用户权限→设置路由拦截→处理回调→测试验证。过程中要仔细检查配置和日志,处理可能出现的异常情况。</think>将SaTokenOAuth2集成到Ruoyi-Cloud-Plus项目中可分为以下步骤: --- ### 一、环境准备 1. **确认版本兼容性** - Ruoyi-Cloud-Plus需基于Spring Boot 2.7+(推荐2.7.15) - SaToken版本需≥1.34.0(支持OAuth2模块) ```xml <!-- pom.xml 添加依赖 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-oauth2</artifactId> <version>1.34.0</version> </dependency> ``` --- ### 二、配置OAuth2服务端 1. **配置文件** ```yaml # application.yml sa-token: oauth2: is-http: false # 是否开启http模式 is-code: true # 是否授权码模式 # 配置客户端信息 client: github: client-id: "your_github_client_id" client-secret: "your_github_secret" redirect-uri: "http://your_domain.com/oauth2/callback" ``` --- ### 三、实现认证适配 1. **自定义权限加载接口** ```java @Component public class StpInterfaceImpl implements StpInterface { @Override public List<String> getPermissionList(Object loginId, String loginType) { // 从Ruoyi用户系统查询权限(示例) SysUser user = userService.selectUserById(Long.valueOf(loginId.toString())); return user.getPermissions(); } } ``` --- ### 四、路由与拦截配置 1. **网关层认证过滤** ```java @Configuration public class SaTokenConfigure implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handle -> { SaRouter.match("/**") // 拦截所有路径 .notMatch("/oauth2/**") // 排除OAuth2回调 .check(r -> StpUtil.checkLogin()); })); } } ``` --- ### 五、OAuth2回调处理 1. **编写回调Controller** ```java @RestController @RequestMapping("/oauth2") public class OAuth2Controller { // 发起授权 @GetMapping("/login/{type}") public void login(@PathVariable String type) { SaOAuth2Request request = SaOAuth2Request.newBuilder() .setServer(type) .setRedirectUri("/oauth2/callback") .build(); SaOAuth2Util.redirectToAuthUrl(request); } // 处理回调 @GetMapping("/callback") public String callback(String code, String state) { SaOAuth2Request request = SaOAuth2Request.newBuilder() .setCode(code) .setState(state) .build(); SaOAuth2Handle.handle(request).login(); return "授权成功"; } } ``` --- ### 六、测试验证 1. **测试流程** - 访问 `http://your_domain.com/oauth2/login/github` - 跳转GitHub授权页面 - 授权后自动回调至 `/oauth2/callback` - 检查Session中是否生成有效Token --- ### 七、注意事项 1. **多服务配置** - 若为微服务架构,需在网关统一处理Token转发 2. **会话持久化** ```xml <!-- 添加Redis依赖实现分布式会话 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-redis</artifactId> <version>1.34.0</version> </dependency> ``` 3. **权限数据同步** - 通过Feign调用Ruoyi的`/system/user/getInfo`接口同步用户数据 --- 通过以上步骤即可完成SaToken OAuth2在Ruoyi-Cloud-Plus中的集成,实现第三方登录能力。实际部署时需根据具体OAuth2服务商(如微信、Gitee)调整配置参数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值