今天2017年9月10日,是教师节,在此感谢老师,祝老师节日快乐。我在我的学生生涯中遇到了好几个对我特别好的老师,真的很感谢他们,因为有你们,所以我们成长。
需求缘起:
有网友说:无法访问到JS/CSS/IMG,其实这个问题,对于使用过Shiro的特别好解决,只需要做简单的配置就可以搞定了,但是对于Shiro不了解的,那么可能就需要求助了。哈哈,同一个问题回答多了,耳朵也会长茧的。好了,本篇博客就是为了解决这个问题。
(1)JS/CSS/IMG被shiro拦截
我们请求spring boot的静态资源被shiro过滤器拦截了,那么我想我直接让shiro放行就可以了,也就是css:anno,img:anno,js:anno,转换为shiro代码就是:
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); filterChainDefinitionMap.put("/img/**", "anon");//img filterChainDefinitionMap.put("/js/**", "anon");//js filterChainDefinitionMap.put("/css/**", "anon");//css
(2)自定义Filter导致无法访问
如果添加了上面的配置,还无法使用的,那么就看看是否是如下这种情况引起的:
在ShiroConfiguration中如果您有这么一段自定义Filter的代码:
@Bean public CustomFormAuthenticationFilter formAuthenticationFilter(){ CustomFormAuthenticationFilter customFormAuthenticationFilter = new CustomFormAuthenticationFilter(); return customFormAuthenticationFilter; }
这样注入Filter的方式也是会出现JS/CSS/IMG无法访问的,这是为什么呢?
这是因为:容器把自定义的CustomFormAuthenticationFilter也作为容器的filter接管,所有的请求又都经过一次filter,那么就会导致一个问题出现:比如:我们定义 /js/**=anon,/css/**=anon, /img/ =anno,那么所有JS/CSS/IMG等资源文件也会被拦截。也就是说:我们自定义的CustomFormAuthenticationFilter和shiroFilter不再是上下级的关系了,而是平级的关系,由Spring的ApplicationFilterConfig一起管理了。
那也就是说:我们只需要修改为上下级的关系就可以了。
首先,我们就不能CustomFormAuthenticationFilter让Spring管理了,先去掉注解@Bean
第二就是:使用ShiroFilterFactoryBean进行注入,就是上下级的关系了,核心代码部分:
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //自定义filter. Map<String,Filter> filters = new HashMap<String,Filter>(); CustomFormAuthenticationFilter formAuthenticationFilter = new CustomFormAuthenticationFilter();//初始化自定义的filter. filters.put("authc", formAuthenticationFilter);//添加到map中. shiroFilterFactoryBean.setFilters(filters);//交给spring shiroFilter管理
(3)问题2方案导致新问题
我们使用了new CustomFormAuthenticationFilter()的方式就无法使用spring的特性,在CustomFormAuthenticationFilter的类中就不能使用@Autowire注入别的service进行使用了。所以这里就存在了新的问题了,由不能直接使用@Bean的方式注入,那么怎么解决呢?
我们会思考是否有一种方式注册我们自定义的Filter到Spring容器中,但是又不添加Filter到FilterChain中呢?所以我们的问题也就是:怎么取消 Filter自动注册?
Spring Boot对Filter,Servlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。通过使用FilterRegistrationBean来进行Filter的注册,同时,设置enabled为false,就可以取消Filter的自动注册行为了。可以参考文档:Spring Boot Document
具体怎么操作呢?
@Bean public CustomFormAuthenticationFilter customFormAuthenticationFilter(){ System.out.println("ShiroConfiguration.formAuthenticationFilter()"); CustomFormAuthenticationFilter customFormAuthenticationFilter = new CustomFormAuthenticationFilter(); return customFormAuthenticationFilter; } @Bean public FilterRegistrationBean registrationBean(CustomFormAuthenticationFilter customFormAuthenticationFilter){ System.out.println("AppcustomFormAuthenticationFilter()"); FilterRegistrationBean registration = new FilterRegistrationBean(customFormAuthenticationFilter); registration.setEnabled(false);//怎么取消 Filter自动注册,不会添加到FilterChain中. return registration; }
这里还是使用@Bean注入CustomFormAuthenticationFilter,但是在自动注入之后使用FilterRegistrationBean对其重新进行了设置,取消自动注册功能。这里容易犯错的地方就是CustomFormAuthenticationFilter不使用@Bean注入了,如果是这样的话,就会发现是先shiro的配置先注入,CustomFormAuthenticationFilter还没注入就无法找到了。
à悟空学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr
相关推荐
在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...
在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发能力而备受青睐,而Shiro则是一个轻量级的安全框架,用于实现用户认证、授权和会话管理。...
在本教程中,我们将深入探讨如何使用Spring Boot和Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发能力而闻名,而Shiro则是一个强大的安全管理框架,提供了认证、授权、会话管理和安全加密等...
Spring Boot Shiro Demo项目是一个基于Spring Boot框架与Apache Shiro实现的权限管理示例,旨在帮助开发者快速理解和应用Shiro进行权限控制。相比Spring Security,Shiro通常被认为更易于理解和使用,更适合小型到...
在本文中,我们将探讨如何利用Spring Boot和Apache Shiro构建一个权限管理系统。Spring Boot以其便捷的启动和配置方式,使得快速开发变得简单。而Shiro则是一个轻量级的安全框架,用于实现用户认证和授权。 首先,...
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例,将持续更新…… 在基于Spring Boot、Spring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目...
《Spring Boot整合Shiro实战详解》 在现代Java Web开发中,Spring Boot以其简洁的配置、快速的开发体验,已经成为主流框架。而Apache Shiro作为一款强大的安全管理框架,提供了认证、授权、会话管理和安全加密等...
在本主题中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发特性,已经成为了Java领域中的热门框架。而Shiro则是一款强大的安全框架,提供了身份验证、...
Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。...
1.1 前言 1.2 资料官网 1.3 spring boot起步之Hello World 1.4 Spring Boot返回json数据 1.5 Spring Boot热部署 1.6 Spring Boot使用别的json解析框架 1.7 全局异常捕捉 ...1.45 Spring Boot Shiro权限管理
首先,让我们从创建一个 Spring Boot 项目开始: 1. 创建 Maven 工程: 使用 Maven 作为构建工具是标准做法,因为它提供了依赖管理和构建自动化功能。新建一个 Maven 项目,并在 `pom.xml` 文件中引入 Spring Boot...
**Spring Boot 集成 Shiro 深度解析** Spring Boot 是一款基于 Spring 的轻量级框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和...
在学习过程中,提供的《从零开始学Spring Boot》PDF电子书会详细介绍Spring Boot的各个组件和使用方式,包括自动配置、起步依赖、Actuator监控、外部配置、测试等方面。而《Shiro教程》则会详细阐述Shiro的各个方面...
### Spring Boot 整合 Shiro 搭建权限管理系统知识点详解 #### 一、Spring Boot 入门 在本部分,我们首先了解如何基于 Spring Boot 构建项目的基础框架。 1. **新建 Maven 工程** - 使用 IntelliJ IDEA 或 ...
**Spring Boot Shiro 知识点详解** Spring Boot 和 Apache Shiro 是两个在Java开发中广泛使用的框架。Spring Boot 提供了快速构建和配置Spring应用的便利性,而Shiro则是一个强大且易用的安全管理框架,专注于身份...
在本文中,我们将深入探讨如何使用Spring Boot与Apache Shiro框架构建一个权限管理系统。Spring Boot以其简化Spring应用程序的开发过程而闻名,而Shiro则是一个轻量级的安全框架,提供了认证、授权、会话管理和安全...
在本文中,我们将深入探讨如何将`Spring Boot`与`Apache Shiro`进行集成,以构建一个安全的基础框架。`Spring Boot`以其便捷的启动和配置方式,为开发者提供了快速开发现代Java应用的能力,而`Apache Shiro`则是一个...
在IT领域,Spring Boot、JPA(Java Persistence API)和Shiro都是常见的技术框架,用于构建高效、便捷的Web应用程序。下面将详细解释这三个技术及其在"spring-boot+shiro+jpa"项目中的应用。 首先,Spring Boot是...
【Spring Boot整合Shiro搭建权限管理系统】 在Java后端开发中,Spring Boot因其简洁的配置和强大的功能,已经成为构建Web应用的首选框架。而Apache Shiro则是一个强大且易用的Java安全框架,用于处理认证、授权、...