2011-11-30 24 views
5

Tenemos un requisito típico en nuestra aplicación.Cambiar la configuración de seguridad de primavera

Tenemos dos configuraciones de seguridad de Primavera: 1. CAS servidor LDAP 2. (NTLM)

lo tanto, ahora tenemos que comprobar si el servidor CAS está disponible o no y utilizar CAS o la configuración de seguridad de LDAP basado en la disponibilidad del servidor CAS.

Estaba intentando cambiar dinámicamente la URL de Entrypoint, sin embargo, ambos archivos de configuración usan diferentes beans/clases.

¿Hay alguna otra manera de lograr esto?

Háganme saber cómo podemos lograrlo y de qué manera?

Gracias de antemano.

Raj

Respuesta

7

Se puede crear un DelegatingAuthenticationEntryPoint que delegue en el CasAuthenticationEntryPoint estándar si el servidor CAS estaba o no delegar en el LoginUrlAuthenticationEntryPoint. La implementación sería algo como lo siguiente

public class DelegatingAuthenticationEntryPoint implements AuthenticationEntryPoint { 
    private AuthenticationEntryPoint casAuthenticationEntryPoint; 
    private AuthenticationEntryPoint ldapAuthenticationEntryPoint; 

    public DelegatingAuthenticationEntryPoint(AuthenticationEntryPoint casAuthenticationEntryPoint, 
     AuthenticationEntryPoint ldapAuthenticationEntryPoint) { 
     this.casAuthenticationEntryPoint = casAuthenticationEntryPoint; 
     this.ldapAuthenticationEntryPoint = ldapAuthenticationEntryPoint; 
    } 

    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) 
     throws IOException, ServletException { 
     if(casServerAvailable()) { 
      casAuthenticationEntryPoint.commence(request, response, authException); 
     } else { 
      ldapAuthenticationEntryPoint.commence(request, response, authException); 
     } 
    } 

    private boolean casServerAvailable() { 
     // TODO implement this method 
     return false; 
    } 
} 

A continuación, conectar el DelegatingAuthenticationEntryPoint con el atributo de punto de entrada-ref similar al siguiente:

<sec:http entry-point-ref="delegateEntryPoint"> 
     ... 
    </sec:http> 
<bean id="delegateEntryPoint" class="sample.DelegatingAuthenticationEntryPoint"> 
    <constructor-arg> 
     <bean class="org.springframework.security.cas.web.CasAuthenticationEntryPoint" 
      p:serviceProperties-ref="serviceProperties" 
      p:loginUrl="https://example.com/cas/login" /> 
    </constructor-arg> 
    <constructor-arg> 
     <bean class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint" 
      p:loginFormUrl="/login"/> 
    </constructor-arg> 
</bean> 
Cuestiones relacionadas