spingboot下shiro自定义过滤器roles

shiro默认的roles过滤,是与的关系,就是你的用户得有roles对应的所有角色,才算有权限。
但是实际开发过程中,更多的是或的需求,只要用户满足roles中的一个角色,就算有权限。
所以就涉及到重写过滤器roles,如下:

/*** 自定义过滤器覆盖默认,且转或*/
public class RoleFilter  extends AuthorizationFilter {@Overrideprotected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object mappedValue) throws Exception {String[] arra = (String[]) mappedValue;if (arra == null || arra.length == 0) {//没有角色限制,有权限访问return true;}Subject subject = getSubject(servletRequest, servletResponse);for (String role : arra) {if (subject.hasRole(role)) {//或return true;}}return false;}
}

写完这个类,再将他放在配置类的ShiroFilterFactoryBean的Filters中即可,如下:

	@Beanpublic ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();//自定义拦截器filtersMap.put("roles", roleFilter());shiroFilterFactoryBean.setFilters(filtersMap);Map<String, String> filterChainDefinitionMap = Maps.newLinkedHashMap();filterChainDefinitionMap.put("/user/**","roles[user,leader]");//其他资源权限shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shiro的集群动态权限更新

shiro的动态权限&#xff0c;一般都是将权限放在数据库中&#xff0c;项目启动后将权限加载给shiro 当数据库的权限数据发生改变时&#xff0c;重新加载权限给shiro。 单机这样做没问题&#xff0c;但是当项目服务是集群的时候&#xff0c;比如有tomcat1&#xff0c;tomcat2&am…

消息队列(3):RabbitMQ

RabbitMQ&#xff0c;基于AMQP协议实现。 特点&#xff1a; 消息可靠&#xff1a;持久化消息&#xff0c;传输确认&#xff0c;发布确认。 路由灵活&#xff1a;使用AMQP的Exchange来路由消息&#xff0c;包括RabbitMQ内置的Exchange&#xff0c;还有复杂的路由也可以使用多个…

java基础 --- Arrays.asList():返回指定数组支持的固定大小列表

Arrays.asList()&#xff1a;返回指定数组支持的固定大小列表 首先看下这个方法的源码注释&#xff0c;注意第一句&#xff0c;Returns a fixed-size list backed by the specified array.&#xff0c; 意思就是&#xff1a;返回指定数组支持的固定大小列表 所以&#xff1a;…

[设计模式] ------ 单例模式

单例模式&#xff0c;是众多设计模式中&#xff0c;写法最多&#xff0c;套路最多&#xff0c;坑最多&#xff0c;面试被问最多的设计模式。 基本上&#xff0c;单例模式在面试中已经被问烂了&#xff0c;依稀记得我的上家公司面试我的时候&#xff0c;说到设计模式&#xff0c…

分布式锁闲谈

分布式锁闲谈 前言 服务器单机情况下&#xff0c;要锁住某个资源&#xff0c;我们一般用到的是synchronized&#xff0c;lock等锁&#xff0c;这是java提供的&#xff0c;也确实能很有效的锁住资源。 但是在服务器集群的情况下&#xff0c;上面这些单机锁就不起作用了&#…

java 后端与前端Date类型与String类型互相转换(使用注解)

一&#xff1a;java 后端格式化输出Date类型的属性值到前端 后端返回的类型中&#xff0c;直接定义Date类型&#xff0c;加上此注解&#xff0c;直接将Date类型转成自定义的格式给前端 class TestDateOutput{JsonFormat(pattern "yyyy-MM-dd")private Date create…

spring boot配置对上传文件的大小限制

spring boot配置对上传文件的大小限制 spring-boot 2.0之前 Spring Boot1.4版本后配置更改为&#xff08;默认单个文件最大1Mb,单次请求文件总数大小最大10Mb&#xff09;: spring.http.multipart.maxFileSize 20MB spring.http.multipart.maxRequestSize20MB spring-boot …

[设计模式] ------ 适配器模式

适配器把一个类的接口&#xff0c;强制变成另外一个类的接口实现。 个人建议&#xff0c;万不得已不要用适配器。但是&#xff0c;你一定要知道有这么个东西。 如果你的项目刚刚起步&#xff0c;就有人用了适配器&#xff0c;那基本上就是滥用。 适配器一般是项目庞大&#xff…

Notepad++中的UTF-8无BOM格式编码

Notepad中&#xff0c;关于utf-8的编码格式&#xff0c;有两种&#xff1a;以UTF-8无BOM格式编码和以UTF-8格式编码。 很容易给人一种错觉&#xff0c;第一反应会选择以UTF-8格式编码&#xff0c;感觉这种就是平时所说的UTF-8&#xff0c;然而这种编码是默认带BOM的&#xff0…

java 上传文件注意事项

java 上传文件注意事项 1、文件名有特殊字符的情况&#xff0c;所以最好是文件名前台url编码&#xff0c;后台再url解码&#xff0c;这点在下载的时候也一样 2、文件大小一定要设置&#xff0c;spring boot 有默认。 3、文件名校验&#xff1a; 3.1、文件后缀校验 3.2、conten…

[设计模式] ------ 装饰模式

首先&#xff0c;假设项目有个核心功能。 随着项目迭代&#xff0c;又产生功能1和功能2 于是有如下需求&#xff1a; 某个场景需要核心功能和功能1组合&#xff0c; 某个场景需要核心功能和功能2组合&#xff0c; 某个场景需要核心功能和功能1和功能2组合&#xff0c; 甚至以后…

hash和一致性hash

hash&#xff1b;简单的hash取余 优点&#xff1a; 计算简单&#xff0c;快速定位 缺点&#xff1a; 容错和扩展差&#xff0c;任何的增加机器或减少机器&#xff0c;都会伴随着重新set值 比如原来有五台机器做缓存&#xff0c;现在加一台&#xff0c;那么余5就变成余6&#x…

[记录]---mysql数据库,decimal类型设置默认值0,不要是null

mysql数据库 类型为decimal的字段&#xff0c;最好把默认值设置为0&#xff0c;不要设置为null。 因为null值在代码中及其容易造成空指针。

Java 线程状态---WAITING(部分转载)

看到一篇关于写线程waiting状态的文章&#xff0c;感觉很生动有趣&#xff0c;转过来保存下。 总结&#xff1a; waiting这个状态&#xff0c;就是等待&#xff0c;明确了等待&#xff0c;就不会抢资源了。 一个线程A在拿到锁但不满足执行条件的时候&#xff0c;需要另一个线…

[记录] --- linux上项目

1.安装jdk8 yum -y list java* 查看可安装java版本 yum install -y java-1.8.0-openjdk-devel.x86_64 java -version jdk在/usr/lib/jvm目录 2.配置环境变量 打开/etc/profile 在profile文件末尾加入: export JAVA_HOME/usr/lib/jvm/java-1.8.0 export PATH$JAVA_HOME/bin:…

[记录] --- linux安装redis

获取redis资源 wget http://download.redis.io/releases/redis-具体版本.tar.gz 解压 tar xzvf redis-具体版本.tar.gz 安装 cd redis-4.0.8 make&#xff08;这个需要安装了gcc,没有gcc的先执行这个命令:yum install gcc&#xff09; cd src mkdir /usr/local/redis/etc&…

服务端高并发分布式架构演进之路(转载,图画的好)

这个文章基本上从单机版到最终版&#xff0c;经历了加缓存&#xff0c;加机器&#xff0c;高可用&#xff0c;分布式&#xff0c;最后到云等过程&#xff0c;其实我一直想总结一套类似的东西&#xff0c;没想到有人已经先弄出来了&#xff0c;那就不重复造轮子了&#xff0c;而…

java 记录一个类加载顺序的坑

看看这个&#xff0c;先想想结果打印的顺序和a、b的值 public class ClassLoderTest {public static void main(String[] args) {staticFun();}static ClassLoderTest clt new ClassLoderTest();static {System.out.println(1);}{System.out.println(2);}ClassLoderTest(){Sy…

[前端记录] --- vue axios 等调用完再执行后面的语句

vue 整合echarts的时候&#xff0c;是先axios 调用后台接口&#xff0c;获取数据&#xff0c;再将数据渲染到页面。 一开始的问题是&#xff1a;第一次请求完&#xff0c;页面没数据&#xff0c;再请求一次才出现数据 分析到最后&#xff0c;发下是由于axios是异步请求的&…

docker容器核心技术点

docker容器核心技术点&#xff1a; 容器其实本质上就是一个进程&#xff0c;只不过容器的进程是比较特殊的。 容器技术的核心功能&#xff0c;就是通过约束和修改进程的动态表现&#xff0c;创造出一个“边界”&#xff0c;通过“障眼法”让人觉得它是一个独立的系统。大多数容…