2012-04-29 1 views
10

In uno Spring MVC 3.1 applicazione che sto cercando di implementare un ricordo-me funzione (con le informazioni salvate nel database).Spring Security: come rinominare il campo "_spring_security_remember_me"?

Ecco quello che ho attualmente:

  • ho creato una tabella persistent_logins.
  • ho questo nel mio file contesto di sicurezza:

    <form-login login-page="/login" 
         authentication-failure-url="/login?err=true" 
         default-target-url="/" 
         username-parameter="username" 
         password-parameter="password" 
         login-processing-url="/validatelogin" /> 
    
    <remember-me key="some_random_key" 
         token-validity-seconds="31536000" 
         data-source-ref="dataSource" /> 
    
  • Nel mio login.jsp, ho:

    <form action="/validatelogin" method="post"> 
        username : <input type='text' id='username' name='username' value='${SPRING_SECURITY_LAST_EXCEPTION.authentication.principal}' /> 
        <br /> 
        password : <input type='password' id='password' name='password' /> 
        <br /><br /> 
        remember me : <input type="checkbox" name="_spring_security_remember_me" /> 
        <br /><br /> 
        <input type="submit" value="submit" /> 
    </form> 
    

Nel "< form-login>" fagiolo , sono stato in grado di rinominare il default "j_password" e campi "j_username" che devono essere utilizzati nel jsp, utilizzando il nome utente parametri e password Parame ter. Ma non trovo un modo per rinominare il campo "_spring_security_remember_me".

Qualche idea su come rinominarlo?

+0

Dio mio come è questo non è un parametro su '' ?? !! – HDave

+0

Sembra che 'remember-me-parameter' sia stato aggiunto alla [ultima versione] (https://github.com/SpringSource/spring-security/blob/master/config/src/main/java/org/springframework/ sicurezza/config/http/RememberMeBeanDefinitionParser.java) –

risposta

10

che viene impostato utilizzando la proprietà parameter di RememberMeServices.

Purtroppo questo non è impostabile utilizzando la configurazione dello spazio dei nomi. Qui ci sono un paio di modi si potrebbe impostare:

  1. Creare un RememberMeServices personalizzati e utilizzarlo con <remember-me services-ref="myRememberMeServices">. Imposta la proprietà sul tuo bean.

  2. Use a BeanPostProcessor (see 1.8) per impostare la proprietà sul valore predefinito RememberMeServices.

+1

Questo è ora possibile configurare tramite lo spazio dei nomi che iniziano con la Primavera di sicurezza 3.2.0.M2 - https://jira.springsource.org/browse/SEC-2119 – Eugen

+0

che bello! Grazie Primavera ragazzi! – sourcedelica

3

Si dovrebbe usare BeanPostProcessor per impostare corrette proprietà:

Consideriamo che si desidera chiamare la vostra proprietà "myRememberMeProperty"

Allora il vostro codice dovrebbe essere simile a questo:

public class MyBeanPostProcessor implements BeanPostProcessor { 

String myRememberMeProperty; 


    public Object postProcessAfterInitialization(Object bean, String name) { 
    if (bean instanceof AbstractRememberMeServices) { 
     AbstractRememberMeServices rememberMe = (AbstractRememberMeServices) bean; 
     rememberMe.setParameter(getMyRememberMeProperty()); 
    } 
    return bean; 
    }  
    public Object postProcessBeforeInitialization(Object bean, String name) { 
    return bean; 
    } 

    public void setMyRememberMeProperty(String myRememberMeProperty){ 
    this.myRememberMeProperty = myRememberMeProperty;  

    } 

public String getMyRememberMeProperty(){ 
    return this.myRememberMeProperty;  

    } 
} 


<bean id="myBeanPostProcessor" 
    class="x.y.z.MyBeanPostProcessor"> 
    <property name="myRememberMeProperty" value="myRememberMeProperty" /> 
</bean> 

Spero che aiuti.

+0

Ho accettato la risposta di ericacm, poiché penso che sia più generale. Ma nel mio caso particolare, usare un bean BeanPostProcessor era la strada da percorrere e ho usato il tuo esempio così com'è .. Quindi grazie mille! Nota che ho anche cambiato il nome del cookie nello stesso modo, usando setCookieName() su AbstractRememberMeServices, all'interno del mio BeanPostProcessor personalizzato! – electrotype