【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo
文章目录
- 0、库表准备
- 1、项目结构
- 2、基于数据库的认证
- 3、授权服务器配置
- 4、授权服务器效果测试
- 5、资源服务器配置
- 6、其他授权模式测试
- 6.1 密码模式
- 6.2 简化模式
- 6.3 客户端模式
- 6.4 refresh_token模式
- 7、令牌换为jwt格式
相关📕:【Spring Security Oauth2 配置理论部分】
0、库表准备
库表结构:
oauth2的相关表SQL:
https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql
基于RBAC,简化下,只要角色,不要权限表,表结构为:
1)用户表sys_user
2)角色表sys_role
3)用户角色关系表sys_user_role
1、项目结构
创建两个服务,一个充当授权服务器,结构为:
另一个充当资源服务器,结构为:
数据库层采用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
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。