SSM 整合 SpringSecurity 遇到的问题

SSM 整合 SpringSecurity 遇到的问题

IOC 容器问题

SSM 有两个 IOC 容器,Spring MVC IOC 和 Spring IOC ,我们需要将 SpringSecurity 加进 SpringMVC IOC 容器中,解决方式:

  1. 创建一个单独 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>
  1. 在 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>

image-20220129151436540

所以,在 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,他是一个代理类型 啥玩意

image-20220129153306572

image-20220129153409094

然后这样

image-20220129153607855

image-20220129153835448

还是报错,啥玩意 🐶

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

image-20220129155230342

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

posted @ 2022-01-29 16:00  zrzicu  阅读(96)  评论(0)    收藏  举报