gpt4 book ai didi

java - Spring Security bean未找到异常

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:19 26 4
gpt4 key购买 nike

我正在尝试为 mvc 项目设置 spring security,但我遇到了困难。我正在使用 spring security 3.1.4.Release。我设置了 spring-security.xml 文件以及 mvc-dispatcher-servlet 文件以进行配置。现在,我的用户详细信息 Bean 出现了未找到 Bean 的异常。

在 intellij 中,我收到 myUserDetailService 的“无法解析 bean”消息。我也无法解析包“ Controller ”。我运行项目时的根本错误是:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Cannot resolve reference to bean 'myUserDetailService' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myUserDetailService' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) [spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) [spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE]

这是我的 spring-security.xml 文件:

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


<!-- Enabling Spring beans auto-discovery -->
<context:component-scan base-package="controller, com.company.admin" />

<http auto-config="true">
<intercept-url pattern="/admin/*" access="ROLE_USER" />
<form-login login-page="/login" default-target-url="/admin/welcome" authentication-failure-url="/loginfailed" />
<logout logout-success-url="/logout" />
</http>

<authentication-manager>
<authentication-provider user-service-ref="myUserDetailService"/>
</authentication-manager>

</beans:beans>

这是我的 mvc-dispatcher-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">


<!-- Enabling Spring beans auto-discovery -->
<context:component-scan base-package="com.company.admin" />

<!-- Enabling Spring MVC configuration through annotations -->
<mvc:annotation-driven />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

这是我的 web.xml:

<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring MVC Application</display-name>


<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/mvc-dispatcher-servlet.xml,
/WEB-INF/spring-security.xml
</param-value>
</context-param>

<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>

我基本上是在尝试遵循本教程:http://kh-yiu.blogspot.com/2012/12/spring-mvc-security-custom.html UserDetailServiceImpl 与此非常相同,但我确实将它放在 main/java 目录中的不同文件夹中。需要注意的是,我使用注释来声明类:

@Service("myUserDetailService")
public class UserDetailsServiceImpl implements UserDetailsService{

有什么想法吗?我很难找到与我正在使用的 Spring 版本相同的教程,所以我很可能弄乱了 xsd 引用。谢谢。

最佳答案

您要添加对以下内容的引用:

<authentication-provider user-service-ref="myUserDetailService"/>

你需要一个具有该 id 的 bean.. 类似:

<bean id="myUserDetailService" class="the.class.of.your.service"></bean>

稍微打破一下你的异常:

//Error creating the bean
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0':
//The myUserDetailService reference cannot be solved, it cannot be found or it has syntax error or something is wrong there
Cannot resolve reference to bean 'myUserDetailService' while setting bean property 'userDetailsService';
//The root cause is an exception deeper.
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
//You don't have a bean with this name:
No bean named 'myUserDetailService' is defined

更新:

现在您添加了 @Service myUserDetailService...它可能是 why does annotate class as @Service do not create bean? 的重复项

关于java - Spring Security bean未找到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com