2011-11-30 17 views
5

Mamy typowe wymagania w naszej aplikacji.Zmiana konfiguracji Spring Security

Mamy dwie konfiguracje Wiosna Bezpieczeństwo: 1. CAS Server 2. LDAP (NTLM)

Więc teraz musimy sprawdzić, czy serwer CAS jest dostępny, czy nie i użyć CAS lub konfiguracji zabezpieczeń LDAP w oparciu o dostępność serwera CAS.

Próbowałem dynamicznie zmieniać adres URL Entrypoint, jednak oba pliki konfiguracyjne używają różnych komponentów/klas.

Czy jest jakiś inny sposób na osiągnięcie tego?

Proszę dać mi znać, jak możemy to osiągnąć i jak?

Z góry dziękuję.

Raj

Odpowiedz

7

Można utworzyć DelegatingAuthenticationEntryPoint który delegował do standardowego CasAuthenticationEntryPoint jeżeli serwer CAS był w górę lub w inny sposób przekazywać LoginUrlAuthenticationEntryPoint. Realizacja będzie wyglądać jak na poniższym

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

Będziesz wtedy okablować DelegatingAuthenticationEntryPoint pomocą entry-point-ref atrybut podobny do następującego:

<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> 
Powiązane problemy