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






