ho bisogno la mia sicurezza di avere la seguente logica:personalizzato Primavera Filtri 3.0 Sicurezza, entrypoints multipli, AuthenticationProvider
- Verificare la presenza di un parametro di intestazione
- A seconda della presenza della paremeter fare sia un redirect a una pagina di accesso (se non autenticata) o controllare il token di autenticazione di base
In entrambi i casi, ho lo stesso provider di autenticazione, ma non posso farlo funzionare. L'entrypoint delegare funziona bene, ma non ho mai entrare nella mia authenticationprovider personalizzato ...
Ecco la mia configurazione di sicurezza:
<security:global-method-security
secured-annotations="enabled" />
<security:http entry-point-ref="delegatingAuthenticationEntryPoint"
use-expressions="true" auto-config="false">
<!-- <security:custom-filter position="FORM_LOGIN_FILTER" -->
<!-- ref="usernamePasswordAuthenticationFilter" /> -->
<!-- <security:custom-filter position="BASIC_AUTH_FILTER" -->
<!-- ref="basicAuthenticationFilter" /> -->
<security:intercept-url pattern="/login*"
filters="none" />
<security:intercept-url pattern="/portimaLogin*"
filters="none" />
<security:intercept-url pattern="/**"
access="isAuthenticated()" />
</security:http>
<bean id="delegatingAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
<constructor-arg>
<map>
<entry key="hasHeader('portima','true')" value-ref="PortimaLoginUrlAuthenticationEntryPoint" />
</map>
</constructor-arg>
<property name="defaultEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="usernamePasswordAuthenticationFilter"
class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
</bean>
<bean id="basicAuthenticationFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="PortimaLoginUrlAuthenticationEntryPoint"
class="be.ap.common.security.spring.PortimaLoginUrlAuthenticationEntryPoint">
<property name="loginFormUrl" value="${portima.login.page}" />
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="AP" />
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider
ref="authenticationProvider" />
</security:authentication-manager>
<bean id="authenticationProvider" class="be.ap.common.security.spring.APAuthenticationProvider" />
<bean id="userDetailsService" class="be.ap.common.security.spring.APUserDetailsService" />
Qualche idea?
Il tuo AuthenticationProvider personalizzato implementa correttamente il metodo 'supports()'? Se restituisce false per la classe 'UsernamePasswordAuthenticationToken', non verrà mai richiesto di elaborare i token di autenticazione creati dai filtri. – zagyi
Non funziona nemmeno nel metodo di supporto ... –
@Override supporti booleani pubblici (classe Estendi oggetto> autenticazione) { return UsernamePasswordAuthenticationToken.class.isAssignableFrom (autenticazione); } –