前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 最简单整合Shiro+JWT方式

Spring Boot 最简单整合Shiro+JWT方式

原创
作者头像
louislivi
修改2019-12-10 18:46:33
1.1K0
修改2019-12-10 18:46:33
举报
文章被收录于专栏:SMProxySMProxy
简介

目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用ShiroJWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑。便结合自身以及大家的常用的运用场景开发出了这个最简单的整合方式fastdep-shiro-jwt

源码地址

希望大家可以star支持一下,后续还会加入其它依赖的简易整合。

https://github.com/louislivi/fastdep

引入依赖

  • Maven<dependency> <groupId>com.louislivi.fastdep</groupId> <artifactId>fastdep-shiro-jwt</artifactId> <version>1.0.2</version> </dependency># 配置文件 - `application.yml` ```yaml 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: 运用@RestController public class TestController { @Autowired private JwtUtil jwtUtil;
  • Gradlecompile group: 'com.louislivi.fastdep', name: 'fastdep-redis', version: '1.0.2'
  • 用户权限配置类@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; } }
代码语言:txt
复制
/**
代码语言:txt
复制
 * 当前为示例所以直接返回了token,真实环境为校验登录信息后再返回token即可
 * @author : louislivi
 */
@GetMapping("front/login")
public String login() {
    // ...校验登录信息是否正确
    // 传入用户唯一标示
    return jwtUtil.sign("1"); 
}
代码语言:txt
复制
/**
代码语言:txt
复制
 * 当前为示例所以权限写的是用户ID 真实环境替换为权限key
 * @author : louislivi
 */
@GetMapping("admin")
@RequiresPermissions("1")
public String jwt() {
    return "ok!";
}}# 测试
1.获取`token`
![front-login.png](https://upload-images.jianshu.io/upload_images/6411787-2a224617bd3d0783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.测试权限校验
- 带token
![hasToken.png](https://upload-images.jianshu.io/upload_images/6411787-7143535ef3b2edea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 不带token
 ```json
 {
     "msg": "Access denied !",
     "code": 401
 }带上token但是,

有时候需要自定义权限校验以及错误返回信息结构等,这时候就需要重写FastDepShiroJwtAuthorization类中的方法。更多详情请看这里

原理

使用ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinition动态注入Bean其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?

希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdepjava整合依赖更简单。在此也招募有志同道合的coder共同完善这个项目。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入依赖
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档