2013-05-24 16 views
5

H sto usando la sicurezza primaverasicurezza Spring 3 http-base di autenticazione-successo-handler

per la forma-login ho

<http auto-config="true"> 
     <intercept-url pattern="/pages/**" access="ROLE_USER" /> 
     <form-login authentication-success-handler-ref="authenticationSuccessHandler" login-page="/login.html" default-target-url="/pages/index.html" 
      always-use-default-target="true" authentication-failure-url="/login.html" /> 
     <logout logout-success-url="/login.html" invalidate-session="true" /> 
     <anonymous enabled='false'/> 
</http> 

qui posso impostare un authentication-success-handler-ref, come posso aggiungi uno al mio autenticazione di base:

<http pattern="/REST/**" realm="REALM" entry-point-ref="authenticationEntryPoint"> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    <http-basic /> 
    <logout logout-url="/REST/logout" success-handler-ref="restLogoutSuccessHandler" /> 
</http> 

ho pensato abour sovrascrivendo BasicAuthenticationFilter, ma come posso iniettare la mia classe cutom per <http-basic />

risposta

5

Non è possibile impostare un gestore di successo di autenticazione per l'autenticazione BASIC. È possibile, tuttavia, estendere BasicAuthenticationFilter e sovrascrivere onSuccessfulAuthentication metodo:

@Component("customBasicAuthFilter") 
public class CustomBasicAuthFilter extends BasicAuthenticationFilter { 

    @Autowired 
    public CustomBasicAuthFilter(AuthenticationManager authenticationManager) { 
     super(authenticationManager); 
    } 

    protected void onSuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication authResult) { 
     // Do what you want here 
    } 
} 

iniettarlo nella configurazione della sicurezza con qualcosa di simile:

<http entry-point-ref="basicEntryPoint"> 
    <custom-filter ref="customBasicAuthFilter" position="BASIC_AUTH_FILTER"/> 
</http> 
<authentication-manager alias="authenticationManager"> 
    ... 
</authentication-manager> 

Aggiornamento: O con Java config invece di XML:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .addFilterAt(customBasicAuthFilter, BasicAuthenticationFilter.class) 
     .exceptionHandling().authenticationEntryPoint(basicEntryPoint); 
} 
+0

Sarebbe possibile fornire una configurazione Java per questo XML? –

+0

@Jadda Sì, consultare l'aggiornamento. – holmis83

3

Come soluzione alternativa è possibile utilizzare http-base in congiunzione con form-login:

<http auto-config="true"> 
    ... 
    <http-basic /> 
    <form-login authentication-success-handler-ref="authenticationSuccessHandler" ... /> 
    ... 
</http> 

BasicAuthenticationFilter funzionerà.

MODIFICA. Se si desidera impostare la versione sovresposta di BasicAuthenticationFilter penso che è necessario:

  1. Aggiungilo a filtrare la catena in posizione BASIC_AUTH_FILTER come spiegato here
  2. Impostare corrispondente punto di ingresso BasicAuthenticationEntryPoint via entry-point ref attributo del tag http.
+0

ciao con questo ottengo sempre il modulo di accesso, e nessuna sfida di autenticazione – wutzebaer

+0

esattamente, ma di base auth deve essere utilizzato dopo il modulo inviare –

+0

ma ho bisogno della auth-challenge di base sui miei URL/REST – wutzebaer

Problemi correlati