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

06-28 1701阅读

文章目录

  • 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购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]