SSM整合SpringSecurity 时遇到的错误

1.在pom.xml加入SpringSecurity的依赖

2.在web.xml加入springsecurity 的过滤器配置

3.编写一个配置类WebAppSecurityConfig,该类要继承WebSecurityConfigurerAdapter

4.在配置类中实现两个方法protected void configure(HttpSecurity security),configure(AuthenticationManagerBuilder builder)。

5.在启动时会报一个错误

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘springSecurityFilterChain’ available

原因:

三大组件启动顺序:

首先:ContextLoaderListener初始化,创建Spring的IOC容器

其次:DelegatingFilterProxy初始化,查找IOC容器,查找Bean

最后:DispatcherServlet初始化,创建SpringMVC的IOC容器

项目启动过程中,先进行ContextLoaderListener初始化加载spring配置文件生成springIOC容器,然后加载过滤器Filter,加载到DelegatingFilterProxy时需要在IOC容器中找一个SpringSecurityFilterChain的bean(默认会去Spring的IOC容器中去找),最后DispatcherServlet初始化加载SpringMvc配置文件生成SpringMVC的IOC容器。为了让SpringSecurity对浏览器请求进行权限控制,需要让SpringMVC来扫描WebAppSecurityConfig。所以DelegatingFilterProxy需要的bean在SpringMvc的IOC容器中。导致找不到这个Bean。

解决办法:

方法一.让SpringMVC的IOC容器和Spring的IOC容器合并,全部用DispatcherServlet来加载所有配置文件。

具体做法:

①在web.xml文件中注释掉监听器ContextLoaderListener的配置

②在springmvc配置文件中加载spring配置文件

方法二:修改源码

具体做法:

1.初始化时直接跳过查找IOC容器

①创建org.springframework.web.filter包,在这个包下创建类DelegatingFilterProxy,将源码拷贝过来。

按住Ctrl点击,进入源码,拷贝出来。

②去230行注释掉初始化查找IOC的代码

2.第一次加载时去找SpringMVC的IOC容器

①在DelegatingFilterProxy类251行左右进行如下修改

最后启动服务就大功告成了!!!

Original: https://www.cnblogs.com/xiaodaigua/p/16210133.html
Author: 小呆瓜北野
Title: SSM整合SpringSecurity 时遇到的错误

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593413/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球