如何用Spring Boot整合Shiro+JWT?这里教大家一…
2020-05-13 16:07:19来源:博客园 阅读 ()
如何用Spring Boot整合Shiro+JWT?这里教大家一最最简单的方式
简介目前 RESTful
大多都采用 JWT
来做授权校验,在 Spring Boot
中可以采用 Shiro
和 JWT
来做简单的权限以及认证验证,在和 Spring Boot
集成的过程中碰到了不少坑。便结合自身以及大家的常用的运用场景开发出了这个最简单的整合方式 fastdep-shiro-jwt
。
这里还要注意:光理论是不够的,在此送大家十套2020最新Java架构实战教程+大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,里面很多新JAVA架构项目教程,还可以跟老司机交流讨教!
源码地址
希望大家可以 star 支持一下,后续还会加入其它依赖的简易整合。
https://github.com/louislivi/fastdep
引入依赖
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 }
扩展
- 带上 token 但是,
有时候需要自定义权限校验以及错误返回信息结构等,这时候就需要重写 FastDepShiroJwtAuthorization
类中的方法。更多详情请看这里
原理
使用 ImportBeanDefinitionRegistrar
BeanDefinitionBuilder.genericBeanDefinition
动态注入 Bean
其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?
希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdep
让 java
整合依赖更简单。在此也招募有志同道合的 coder
共同完善这个项目。
最后注意:光理论是不够的,在此送大家十套2020最新Java架构实战教程+大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,里面很多新JAVA架构项目教程,还可以跟老司机交流讨教!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
原文链接:https://www.cnblogs.com/chengxuyuanaa/p/12884776.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash