java - Spring Security 预身份验证配置

标签 java spring spring-security

我正在尝试在 Spring Web 应用程序中配置 PreAuthenticationFilter。我正在关注这个official guide ,并查看部分

18.2.1 Request-Header Authentication (Siteminder)

这是我的 security.xml 文件,它概述了我的 bean 和配置:

<beans:beans xmlns="http://www.springframework.org/schema/security"
         xmlns:beans="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-4.1.xsd
                                http://www.springframework.org/schema/security 
                                http://www.springframework.org/schema/security/spring-security-4.0.xsd" 
         xmlns:context="http://www.springframework.org/schema/context">

<beans:bean id="myFilter" class="com.MyFilter">
    <beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>

<beans:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
    <beans:property name="preAuthenticatedUserDetailsService">
      <beans:bean id="userDetailsServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
        <beans:property name="userDetailsService" ref="userDetailsService"/>
      </beans:bean>
    </beans:property>
</beans:bean>

<authentication-manager alias="authenticationManager">
    <authentication-provider ref="preauthAuthProvider" />
</authentication-manager>

<http auto-config="true" use-expressions="true" pattern="/**" >
    <intercept-url pattern="/main/data" access="hasAnyRole('ROLE_ADMINISTRATORS')" requires-channel="https" />
    <intercept-url pattern="/**" access="isAuthenticated()" requires-channel="any" />
    <http-basic />
</http>

基本上,我从指南中唯一改变的是我的filterId和类。其他一切都一样。

我收到的错误是这样的:

Cannot resolve reference to bean 'userDetailsService' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userDetailsService' is defined

我在这里缺少什么?该类已经在我的项目中的 Spring Jar 中,并且可以导入到任何类中。

最佳答案

您正在引用一个 bean userDetailsS​​ervice 以在下面的行中设置一个具有 name userDetailsS​​ervice 的属性。

<beans:property name="userDetailsService" ref="userDetailsService"/>

因此,您应该在 security.xml 文件中的某个位置声明一个 ID 为 userDetailsS​​ervice 的 bean,如下所示。但我没有看到任何这样的 bean 。

<bean id="userDetailsService" class="org.xxx.xxx">
</bean>

例如,您有一个 ref bean preauthAuthProvider 并且它引用了

<beans:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">

关于java - Spring Security 预身份验证配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193410/

相关文章:

java - 关于重写 SimpleUrlAuthenticationFailureHandler 的说明

java - 如何在 Spring Boot 中使用缓存来提高 OAuth2 ResourceServer 的性能

java - 我必须在FutureTask中手动处理中断吗?

java - IntelliJ 和 Eclipse : debug Java application started by Maven exec:exec

java - Quartz @DisallowConcurrentExecution 允许类的多个实例运行但不允许作业?

java - Spring MVC 可以捕获异常并在所有 Controller 的响应中返回 BindingResult 吗?

authentication - Vaadin 身份验证最佳实践

java - 如何从流中读取 x 个字节?

java - Oracle异常: SQL command not properly ended

java - Spring-boot 应用程序在执行器端口上抛出错误