2016-04-27 12 views
0

Ich versuche, Spring mit LDAP zu integrieren, nach erfolgreicher Login-Authentifizierung kann ich meinen Controller treffen, aber nicht sehen Seite zu sehen.LDAP-Integration mit Spring

Das ist mein security.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans:beans xmlns="http://www.springframework.org/schema/security" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:beans="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> 
     <http auto-config="true"> 
       <intercept-url pattern="/abc/**" 
       access="ROLE_USER" /> 

      <form-login login-page="/login" authentication-success-handler-ref="authenticationSuccessHandler" authentication-failure-url="/login?error=true" default-target-url="/home/page" 
       login-processing-url="/j_security_check" /> 

     </http> 



    <beans:bean id="authenticationSuccessHandler" class="com.abc.webapp.security.AuthenticationSuccessHandler"> 
     </beans:bean> 

     <beans:bean id="tdrUserDetailsContextMapper" class="com.XXXX.util.LDAPGrantedAuthoritiesMapper"> 
     </beans:bean> 



     <authentication-manager> 

<authentication-provider ref="activeDirectoryAuthenticationProvider"> 

</authentication-provider> 

    </authentication-manager> 

    <beans:bean id="activeDirectoryAuthenticationProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider" > 
<beans:constructor-arg value="XXXXXXX.XXX" /> 
<beans:constructor-arg value="ldaps://XXXXXX:636/" /> 
<beans:property name="convertSubErrorCodesToExceptions" value="true"/> 
<beans:property name="userDetailsContextMapper" ref="tdrUserDetailsContextMapper"/> 

</beans:bean> 


</beans:beans> 

Meine LDAPMapper Klasse:

package com.abc.util; 

import java.util.ArrayList; 
import java.util.Collection; 
import org.springframework.ldap.core.DirContextAdapter; 
import org.springframework.ldap.core.DirContextOperations; 
import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.authority.SimpleGrantedAuthority; 
import org.springframework.security.core.userdetails.User; 
import org.springframework.security.core.userdetails.UserDetails; 
import org.springframework.security.ldap.userdetails.UserDetailsContextMapper; 
public class LDAPGrantedAuthoritiesMapper implements UserDetailsContextMapper { 

    @Override 
    public UserDetails mapUserFromContext(DirContextOperations ctx, 
      String username, Collection<? extends GrantedAuthority> authorities) { 
     // TODO Auto-generated method stub 
     Collection<GrantedAuthority> mappedAuthorities = new ArrayList<GrantedAuthority>(); 

     ctx.setAttributeValue("referral", "follow"); 

     SimpleGrantedAuthority roleUser = new SimpleGrantedAuthority("ROLE_USER"); 
     for (GrantedAuthority granted : authorities) { 

       if (granted.getAuthority().equalsIgnoreCase("Vendor-TaisTech-CreditPaymentApp-R")) { 

        mappedAuthorities.add(roleUser); 
       } 
     } 

      UserDetails userDetails= new TaisUserDetails(username, "", true, true, true, true, mappedAuthorities); 


     return taisUserDetails; 
    } 
    @Override 
    public void mapUserToContext(UserDetails user, DirContextAdapter ctx) { 
     // TODO Auto-generated method stub 

    } 

} 

mein urlrewrite.xml:

<urlrewrite default-match-type="wildcard"> 

    <rule> 
     <from>/</from> 
     <to type="redirect" last="true">/home/page</to> 
    </rule> 
    <rule> 
     <from>/abc/**</from> 
     <to last="true" type="redirect">%{context-path}/$1</to> 
    </rule> 

    <rule> 
     <from>/login*</from> 
     <to>/pages/login.jsp</to> 
    </rule> 
    <rule> 
     <from>/logout*</from> 
     <to>/pages/logout.jsp</to> 
    </rule> 

    <!-- Spring MVC --> 
    <rule> 
     <from>/**</from> 
     <to>/abc/$1</to> 
    </rule> 
</urlrewrite> 

In meinem Authentifizierungserfolg hanlder bekomme ich einen autorisierten Benutzer mit ROLE_USER. Aber wenn ich meine Controller-Klasse traf, gibt es mich zurück: http://localhost:8080/login mit 404 Fehler.

In meinen Protokollen kann ich sehen, dass der Benutzer erfolgreich authentifiziert wurde, aber ich kann keine meiner Anwendungsseiten anzeigen.

Antwort

0

Alles sieht korrekt aus, ich denke, es gibt ein Problem von urlRewrite oder check requestInterceptor Klasse, wenn Sie erstellt haben.

+0

Bitte überprüfen Sie oben i mein urlrewrite.xml hinzugefügt haben (die mit einfachen db Integration mit MySQL arbeitet) –

+0

Haben Sie Ihre requestInterceptor Klasse überprüft, ich denke, es – Anksss

+0

Umleitung sein sollte, fand ich das Problem dort in einem eine falsche Umleitung war von meinem benutzerdefinierten Abfangjäger. Danke für Ihre Hilfe –

0

Es gab eine falsche Umleitung auf meine Anfrage Interceptor, nach dem Entfernen der unnötigen Umleitung begann es zu arbeiten.

Verwandte Themen