Spring Boot 最简单整合Shiro+JWT方式
简介
目前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>
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
其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?
希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdep
让java
整合依赖更简单。在此也招募有志同道合的coder
共同完善这个项目。
Spring Boot 最简单整合Shiro+JWT方式的更多相关文章
- Spring Boot入门 and Spring Boot与ActiveMQ整合
1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...
- Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)
Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...
- 转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合
Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合 http://blog.csdn.net/balabalayi/article/detai ...
- Spring Boot 2.0 整合携程Apollo配置中心
原文:https://www.jianshu.com/p/23d695af7e80 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够 ...
- Spring Boot 2.x 整合 Redis最佳实践
一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...
- Spring Boot 2.x整合Redis
最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...
- spring+springMVC+mybatis简单整合
spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...
- RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ
在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ. 先给出最终目录结构: 搭建步骤如下: 新建maven工程amqp 修改pom ...
- Spring Boot配置过滤器的两种方式
过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验.权限控制.敏感词过滤等,下面介绍下Spring Boot配置过 ...
随机推荐
- JavaSE语法(中)
6.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递.Java语言的方法调用支持参数的值传递.当一个对象实例作为一个 ...
- python学习之【第五篇】:Python中的元组及其所具有的方法
1.前言 Python的元组(tuple)与列表很相似,不同之处在于元组不能被修改,即元组一旦创建,就不能向元组中的增加新元素,不能删除元素中的元素,更不能修改元组中元素.但是元组可以访问任意元素,可 ...
- 通俗易懂了解Vue组件的生命周期
1.前言 在使用vue2.0进行日常开发中,我们总有这样的需求,我就想在页面刚一加载出这个表格组件时就发送请求去后台拉取数据,亦或者我想在组件加载前显示个loading图,当组件加载出来就让这个loa ...
- MySQL系列:走进数据库,相关概念你都明白吗?
数据库,一个我们常常提到的名词,但是你有没有想过,它到底是什么意思呢,而我们常说的 MySQL.Oracle 等又到底指什么呢? 数据库 数据库(DataBase),简称 DB,是数据库是存储数据的集 ...
- python基础-匿名函数和内置函数
匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...
- oracle直接调用web services
oracle调用C#开发web services 1, 去oracle官网上下载dbws-callout-utility-10131.zip 地址:https://oracle-base.com/a ...
- 软件 ---- idea启动
1.将配置转移到别的盘符,避免重做系统后,之前的配置就没了 找到安装的位置,默认安装的话地址一般是 C:\Program Files\JetBrains\IntelliJ IDEA 2017.2 ID ...
- springboot封装JsonUtil,CookieUtil工具类
springboot封装JsonUtil,CookieUtil工具类 yls 2019-9-23 JsonUtil public class JsonUtil { private static Obj ...
- PHP经典算法题
1.百钱买百鸡 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 分析:估计现在小学生都能手工推 ...
- 【Linux】Debian 下安装 Apache,MySQL,PHP
首先,对你的源进行更新: $ sudo apt-get update 第一步--安装 Apache Apache 是一个开源软件,它目前运行在全球超过 50% 的服务器上,是 LAMP(Linux,A ...