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/
转载文章受原作者版权保护。转载请注明原作者出处!