Spring Boot 最简单整合Shiro+JWT方式
程序员文章站
2022-03-21 17:25:49
简介 目前 大多都采用 来做授权校验,在 中可以采用 和`JWT Spring Boot fastdep shiro jwt`。 源码地址 希望大家可以star支持一下,后续还会加入其它依赖的简易整合。 "https://github.com/louislivi/fastdep" 引入依赖 配置文件 ......
简介
目前restful
大多都采用jwt
来做授权校验,在spring boot
中可以采用shiro
和jwt
来做简单的权限以及认证验证,在和spring boot
集成的过程中碰到了不少坑。便结合自身以及大家的常用的运用场景开发出了这个最简单的整合方式fastdep-shiro-jwt
。
源码地址
希望大家可以star支持一下,后续还会加入其它依赖的简易整合。
引入依赖
maven
<dependency> <groupid>com.louislivi.fastdep</groupid> <artifactid>fastdep-shiro-jwt</artifactid> <version>1.0.2</version> </dependency>
gradle
compile group: 'com.louislivi.fastdep', name: 'fastdep-redis', version: '1.0.2'
配置文件
-
application.yml
fastdep: shiro-jwt: filter: #shiro过滤规则 admin: path: /admin/** role: jwt # jwt为需要进行token校验 front: path: /front/**/** role: anon # anon为无需校验 secret: "6dx8siuahxjynpsg18sspjps50lzct52" # jwt秘钥 # expiretime: 7200000 # token有效期 # prefix: "bearer " # token校验时的前缀 # signprefix: "bearer " # token生成签名的前缀 # header: "authorization" # token校验时的header头 # 以下对应为shiro配置参数,无特殊需求无需配置 # loginurl: # successurl: # unauthorizedurl: # filterchaindefinitions:
-
用户权限配置类
@component public class fastdepshirojwtconfig extends fastdepshirojwtauthorization { @autowired private userrequestdatamapper userrequestdatamapper; @override public simpleauthorizationinfo getauthorizationinfo(string userid) { // 查询该用户下的所有权限(当前为示例仅查询用户id真实环境替换为用户的权限值) set<string> collect = userrequestdatamapper.selectoptions().stream().map(u -> u.getuserid().tostring()).collect(collectors.toset()); simpleauthorizationinfo simpleauthorizationinfo = new simpleauthorizationinfo(); system.out.println(collect); // 当前值为 [1] // 添加用户权限到simpleauthorizationinfo中 simpleauthorizationinfo.addstringpermissions(collect); return simpleauthorizationinfo; } }
运用
@restcontroller public class testcontroller { @autowired private jwtutil jwtutil; /** * 当前为示例所以直接返回了token,真实环境为校验登录信息后再返回token即可 * @author : louislivi */ @getmapping("front/login") public string login() { // ...校验登录信息是否正确 // 传入用户唯一标示 return jwtutil.sign("1"); } /** * 当前为示例所以权限写的是用户id 真实环境替换为权限key * @author : louislivi */ @getmapping("admin") @requirespermissions("1") public string jwt() { return "ok!"; } }
测试
1.获取token
2.测试权限校验
带token
- 不带token
{ "msg": "access denied !", "code": 401 }
- 带上token但是,
simpleauthorizationinfo
中无指定权限
{ "msg": "subject does not have permission [1]", "code": 403 }
扩展
有时候需要自定义权限校验以及错误返回信息结构等,这时候就需要重写fastdepshirojwtauthorization
类中的方法。更多详情请看
原理
使用importbeandefinitionregistrar
beandefinitionbuilder.genericbeandefinition
动态注入bean
其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?
希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdep
让java
整合依赖更简单。在此也招募有志同道合的coder
共同完善这个项目。
上一篇: Linux kernel中常见的宏整理
下一篇: 数组与字符串——合并区间
推荐阅读
-
十、Spring boot 简单优雅的整合 Swagger2
-
最简单的基于quartz和spring整合入门案例
-
spring boot整合mybatis方式一
-
Spring Boot 最简单整合Shiro+JWT方式
-
十、Spring boot 简单优雅的整合 Swagger2
-
Spring Boot 整合——Spring batch通过不同方式输出数据(ItemWriter)
-
Spring Boot 整合——Spring batch通过不同方式读取数据(ItemReader)
-
Spring Boot 整合——MongoDB整合2(MongoDB实体创建以及简单CRUD)
-
spring boot整合mybatis方式一
-
Spring Boot 最简单整合Shiro+JWT方式