【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

2024-06-28 1703阅读

文章目录

  • 0、库表准备
  • 1、项目结构
  • 2、基于数据库的认证
  • 3、授权服务器配置
  • 4、授权服务器效果测试
  • 5、资源服务器配置
  • 6、其他授权模式测试
    • 6.1 密码模式
    • 6.2 简化模式
    • 6.3 客户端模式
    • 6.4 refresh_token模式
    • 7、令牌换为jwt格式

      相关📕:【Spring Security Oauth2 配置理论部分】

      0、库表准备

      库表结构:

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      oauth2的相关表SQL:

      https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql
      

      基于RBAC,简化下,只要角色,不要权限表,表结构为:

      1)用户表sys_user

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      2)角色表sys_role

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      3)用户角色关系表sys_user_role

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      1、项目结构

      创建两个服务,一个充当授权服务器,结构为:

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      另一个充当资源服务器,结构为:

      【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

      数据库层采用mysql + mybatis-plus实现,相关依赖:

         
          
              org.springframework.boot
              spring-boot-starter-security
          
          
          
              org.springframework.security.oauth
              spring-security-oauth2
              2.3.4.RELEASE
          
          
              org.springframework.boot
              spring-boot-starter-web
          
          
              org.springframework.boot
              spring-boot-starter-test
              test
          
          
          
              mysql
              mysql-connector-java
              8.0.30
          
          
          
              com.baomidou
              mybatis-plus-boot-starter
              3.4.0
          
          
              com.baomidou
              mybatis-plus
              3.4.0
          
          
          
              org.projectlombok
              lombok
          
      
      

      application.yml内容:

      # 资源服务器同配置,端口为9010
      server:
        port: 9009   
      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test-db?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
          username: root
          password: root123
        main:
          allow-bean-definition-overriding: true
      logging:
        level:
          com.itheima: debug
      mybatis-plus:
        configuration:
          map-underscore-to-camel-case: true
        type-aliases-package: com.plat.domain
      

      2、基于数据库的认证

      创建Po:

      @TableName("sys_user")
      @Data
      public class SysUserPo implements Serializable {
          private Integer id;
          private String username;
          private String password;
          public Integer getId() {
              return id;
          }
          public String getUsername() {
              return username;
          }
          public String getPassword() {
              return password;
          }
      }
      
      @TableName("sys_role")
      @Data
      public class SysRolePo implements GrantedAuthority, Serializable {
          private Integer id;
          private String roleName;
          private String roleDesc;
          @Override
          public String getAuthority() {
              return this.roleName;    //注意这里权限的处理,通过实现GrantedAuthority, 和框架接轨
          }
      }
      

      创建一个中转类,实现UserDetails,以后返回给框架(也可以用框架自己的User类,我觉得自己写个中转类更顺手)。注意其聚合SysUserPo以及权限属性。因SysUser我设计的简略,因此UserDetails的是否被禁用、是否过期等字段直接返回true,不再去自定义的SysUser中去查

      @Data
      @Builder
      public class SecurityUser implements UserDetails {
          private SysUserPo sysUserPo;
          private List roles;
          public SecurityUser(SysUserPo sysUserPo, List roles) {
              this.sysUserPo = sysUserPo;
              this.roles = roles;
          }
          @Override
          public Collection
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]