
目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和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> Gradlecompile 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 } SimpleAuthorizationInfo中无指定权限{ "msg": "Subject does not have permission [1]", "code": 403 } 扩展
有时候需要自定义权限校验以及错误返回信息结构等,这时候就需要重写FastDepShiroJwtAuthorization类中的方法。更多详情请看这里
使用ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinition动态注入Bean其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?
希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdep让java整合依赖更简单。在此也招募有志同道合的coder共同完善这个项目。
1 Oktfolio 2019-12-10 18:46:03 +08:00 我更多用 Spring Security |
2 nxcdJaNnmyF9O90X 2019-12-11 13:54:26 +08:00 老哥 不搞 swoole 啦 |