java shiro jwt_Spring Boot 最简单整合 Shiro+JWT 方式

简介

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

源码地址

引入依赖

Maven

com.louislivi.fastdep

fastdep-shiro-jwt

1.0.2

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 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

c78187d7589210fe0555aa2c578b98c1.png

2.测试权限校验

带token

98856ee7fd628f260ade72c691ad40e7.png

不带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共同完善这个项目。

本作品采用《CC 协议》,转载必须注明作者和本文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值