2016-04-27 20 views
0

succesfullログイン認証後、私はコントローラにヒットできますが、ビューページを見ることができないので、SpringとLDAPを統合しようとしています。SpringとLDAPの統合

これは私の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> 

マイLDAPMapperクラス:

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 

    } 

} 

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

私の認証成功者には、ROLE_USERの権限を持つユーザーがいます。 しかし、私がコントローラクラスにヒットしたとき、それは私に返信します: http://localhost:8080/login 404エラー。

私のログには、そのユーザーが正常に認証されたことがわかりましたが、私のアプリケーションページは表示できません。

答えて

0

すべてが正しいように見えますが、作成した場合は、urlRewriteまたはrequestInterceptorクラスの問題があると思います。

+0

私はurlrewrite.xmlを追加しました(mysqlとの単純なdb統合で動作しています) –

+0

requestInterceptorクラスを確認しましたか?リダイレクトがあるはずです – Anksss

+0

1つのリダイレクトが間違っていた問題を発見しました。私のカスタムインターセプターの。ご協力いただきありがとうございます –

0

不要なリダイレクトを削除した後、リクエストインターセプタで間違ったリダイレクトが発生しました。