简介

目前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>
  • 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其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?

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

最新文章

  1. Linux命令中特殊符号
  2. MySQL导入sql脚本 导出数据库
  3. mysqldump dump-slave
  4. 转载Linq中GroupBy方法的使用总结
  5. SAE、搜狐云景和百度云之初见
  6. cocos2d-x学习日志(10) --射击游戏(喵星战争)
  7. 对付&quot;反盗链&quot;
  8. 【JSON学习之道】js操作JSON
  9. 吾八哥学Selenium(二):操作输入框/按钮的方法
  10. ajax核心技术1---XMLHttpRequset对象的使用
  11. [daily][archlinux] TODO LIST
  12. OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)
  13. Chrome及Firefox插件
  14. Keepalived两节点出现双VIP情况及解决方法【原创】
  15. Java容器解析系列(6) Queue Deque AbstractQueue 详解
  16. 【IOS学习】之四、协议,委托,分类粗解
  17. selenium3启动浏览器
  18. linux-2.6内核驱动学习——jz2440之输入子系统
  19. SpringMvc date数据传递处理
  20. DevOps是一种文化,不是角色!

热门文章

  1. Lost My Music:倍增实现可持久化单调栈维护凸包
  2. 【Java实践】Kettle从一次实验说起
  3. python面试看这一篇就够了
  4. 为什么我加了索引,SQL执行还是这么慢(二)?
  5. 2019年10月13日 计算机英语习题 wangqingchao
  6. html5 textarea 写入换行的方法
  7. Linux常用命令复习
  8. Redis实战--Jedis实现分布式锁
  9. thinkphp在模板中使用php的函数
  10. ubuntu安装应用日志