我这边用spring boot搭建了一套东西,其中用到了shiro,
但是我在springboot与shiro配合过程中发现,一个问题:
我在boot上声明的filter比如:MyUserfilter(继承Userfilter)
然后shirofilter配置如下: /** = user
我跟踪代码发现,shiro的filterchain会首先经过一次shirofilter chain
再经过一次容器的filterchain,
那么问题就出现在容器把我定义的MyUserfilter也作为容器的filter接管,
所有的请求又都经过一次filter,导致一个问题出现,比如:
我定义 /css/**=anon, /js/**=anon, /** = user,那么所有css js等资源文件也会被拦截,
解决办法:
不知道你是用哪种方式配置, 是用SpringConfigBean ? 还是用XML? 其实这个问题的真正原因是定义了多个filter与shirofilter 一同被spring-boot 识别,加入了filterChain. 相当于myFilter与shiroFilter不再是上下级的关系,而是平级的关系,由spring ApplicationFilterConfig 一起管理了.
我这些天也遇到这个问题, 不过我是用的xml配置, 因为我的项目有一些本身的因素,暂时无法用springConfigureBean方式来处理,所以我还是用原来的spring shiro.xml来配置, 对于ConfigBean来说应该是一样的.
只需要改造一下, 将原来的那些 自定义的Fliter不要在外层Bean定义,直接放到filters的Map内层,如下见红色字体:
<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="com.skyroam.bsp.security.client.ClientShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="${client.login.url}"/>
<property name="successUrl" value="${client.success.url}"/>
<property name="unauthorizedUrl" value="${client.unauthorized.url}"/>
<property name="filters">
<util:map>
<entry key="authc">
<bean class="com.sbc.security.client.login.ClientFormAuthenticationFilter">
<property name="remoteService" ref="remoteService"/>
</bean>
</entry>
<entry key="sessionUser">
<bean class="com.sbc.security.client.login.SessionUserFilter">
<property name="remoteService" ref="remoteService"/>
</bean>
</entry>
</util:map>
</property>
<property name="filterChainDefinitionsStr" value="${client.filter.chain.definitions}"/>
</bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="filters">
<map>
<!-- 身份验证过滤器 -->
<!-- 注意:自定义shiro过滤器配置在 shiro内部bean中 否则会一同加入到filterChain中执行2次-->
<entry key="userFilter">
<bean class="com.tianchengsys.bsp.web.console.security.UserFilter">
<property name="loginUrl" value="/ucapi/user/login" />
<property name="unLoginUrl" value="/ucapi/user/logout" />
<property name="ignoreUrls" value="${shiro.ignoreUrls:/,/ucapi/user/logout,/api/*/public/*,/*.jsp,/*.js,/api/common/**,/swagger-ui.html,/webjars/**,/swagger-resources/**,/api-docs/**}" />
</bean>
</entry>
</map>
</property>
<property name="filterChainDefinitions" ref="shiroFilterChainDefinitions" />
</bean>
分享到:
相关推荐
Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...
包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...
spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....
这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...
Getting started with Spring Framework (4th Edition) is a hands-on guide to begin developing applications using Spring Framework 5. The examples (consisting of 88 sample projects) that accompany this ...
介绍一个基于Spring Boot 3.0、Spring Cloud 2022 & Alibaba的微服务RBAC权限管理系统。该系统可以实现微服务RBAC权限管理,通过RBAC权限管理机制对用户访问系统的权限进行限制,从而提高系统的安全性和可用性。同时...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Spring Cloud和Spring Boot是两个非常重要的Java开发框架,它们在微服务架构中扮演着核心角色。Spring Boot简化了创建独立的、生产级别的基于Spring的应用程序的过程,而Spring Cloud则为开发者提供了快速构建分布式...
《Spring AI Core 0.8.1:开启人工智能之旅》 在现代软件开发领域,Spring框架以其强大的功能和灵活性,已经成为Java开发中的首选框架之一。而Spring AI Core则是Spring生态系统中专门为人工智能(AI)和机器学习...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...
Spring 框架是 Java 开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。Spring 4.3.14 是该框架的最后一个4.x系列正式版,发布于2018年2月24日。这个版本在Spring 5.0发布之前提供了一个...
在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一整套服务来简化企业级应用的构建。RabbitMQ则是一个流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地...
Spring Cloud系列教程 Spring Boot Spring Cloud Stream 和 Kafka案例教程 springcloud生产者与消费者项目实战案例 Spring Cloud 中断路器 Circuit Breaker的应用 配置 Spring Cloud Config Server Spring Cloud ...
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...