SSM 整合 SpringSecurity 遇到的问题
SSM 整合 SpringSecurity 遇到的问题
IOC 容器问题
SSM 有两个 IOC 容器,Spring MVC IOC 和 Spring IOC ,我们需要将 SpringSecurity 加进 SpringMVC IOC 容器中,解决方式:
- 创建一个单独 SpringSecurity xml 配置文件,注册到监听器和 Spring 配置文件放在一起,解决 tomcat 启动与Srping 容器冲突的问题;
<!--注册spring的监听器,全局初始化参数
这里多加一个 spring-security.xml 是为了解决 spirng-security 与 spirng 容器, 在 tomcat 启动冲突的问题
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:config/applicationContext.xml,
classpath:config/spring-security.xml
</param-value>
</context-param>
<!--spring监听器-->
<!--作用:在启动Tomcat容器的时候,该类的作用就是自动装载ApplicationContext的配置信息,如果没有设置contextConfigLocation的初始参数则会
使用默认参数WEB-INF路径下的application.xml文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
-
在 SpirngSecurity xml 配置文件中 注入 SpringSecurity 配置类,不然会报异常:
29-Jan-2022 15:17:01.075 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.zrz.crowd.mvc.config.WebAppSecurityConfig"></bean>
</beans>

所以,在 SpirngSecurity xml 配置文件 注入了配置类,可以正常运行;
UserDetailsService
这里遇到了问题 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.zrz.crowd.mvc.config.WebAppSecurityConfig#0': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.core.userdetails.UserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
说是找不到 WebUserDetailsService,他是一个代理类型 啥玩意


然后这样


还是报错,啥玩意 🐶
这里花了点时间,然后想了一下,我的 WebUserDetailsService 实现了 UserDetailsService 接口,那就和我们写的 XXXServiceImpl 实现了 XXXService 接口一样,那我就在 SpringSecurity 配置类中注入UserDetailsService;

这样就解决了,可以正常运行 😛;

浙公网安备 33010602011771号