2016-05-12 17 views
0

Ich versuche, einen PreAuthenticationFilter in einer Spring-Webanwendung zu konfigurieren. Ich verfolge diese official guide, und suchen Sie in AbschnittSpring Security Preauthentication Config

18.2.1 Anfrage-Header-Authentifizierung (Siteminder)

Hier ist meine security.xml Datei, die meine Bohnen und Konfiguration skizziert:

<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> 

Grundsätzlich ist das einzige, was ich von der Führung am chaning ist mein filterId und Klasse. Alles andere ist gleich.

Der Fehler, den ich bekommen habe, ist dies:

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 

Was bin ich hier? Diese Klasse befindet sich bereits im Spring Jar, das in meinem Projekt enthalten ist, und kann in jede Klasse importiert werden.

Antwort

1

Sie verweisen auf eine Bean userDetailsService, um eine Eigenschaft mit name userDetailsService in der unteren Zeile festzulegen.

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

So sollten Sie userDetailsService einige, wo in Ihrer security.xml Datei wie unten eine Bohne mit id erklärt. Aber ich sehe keine solche Bohne.

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

Zum Beispiel können Sie eine ref Bohne haben preauthAuthProvider und Sie haben es Referenzierung auf

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

Seufzer, sind Sie richtig. Ich vermisse den kleinen Fußabdruck, der besagt, dass Sie Ihren eigenen Benutzerdetaildienst implementieren müssen. In grails 3 plugin, das tut das selbe, du nicht, also eine kleine Diskrepanz dort verursacht das Problem. – angryip