2012-04-29 11 views
10

एक स्प्रिंग एमवीसी 3.1 एप्लिकेशन में मैं को लागू करने की कोशिश कर रहा हूं- मुझे सुविधा (डेटाबेस में सहेजी गई जानकारी के साथ)।वसंत सुरक्षा: "_spring_security_remember_me" चेकबॉक्स फ़ील्ड का नाम कैसे बदलें?

यहाँ मैं वर्तमान में क्या है:

  • मैं एक persistent_logins तालिका बनाया।
  • मैं अपने सुरक्षा संदर्भ फ़ाइल में इस है:

    <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" /> 
    
  • मेरी login.jsp में, मेरे पास है:

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

"< फार्म लॉगिन>" सेम में , मैं डिफ़ॉल्ट "j_password" और "j_username" फ़ील्ड का नाम बदल सकता हूं जिन्हें jsp में उपयोग किया जाना है, उपयोगकर्ता नाम-पैरामीटर और पासवर्ड-पैराम का उपयोग कर ter। लेकिन मुझे "_spring_security_remember_me" चेकबॉक्स फ़ील्ड का नाम बदलने का कोई तरीका नहीं मिला है।

इसका नाम बदलने के बारे में कोई विचार?

+0

मेरा भगवान यह '?? पर पैरामीटर नहीं है !! – HDave

+0

ऐसा लगता है कि 'याद-मुझे-पैरामीटर' को [नवीनतम संस्करण] में जोड़ा गया है (https://github.com/SpringSource/spring-security/blob/master/config/src/main/java/org/springframework/ सुरक्षा/कॉन्फ़िगर/http/RememberMeBeanDefinitionParser.java) –

उत्तर

10

RememberMeServices की संपत्ति का उपयोग करके सेट किया गया है।

अफसोस की बात यह नामस्थान कॉन्फ़िगरेशन का उपयोग कर सेटटेबल नहीं है। यहां कुछ ऐसे तरीके के एक जोड़े आप इसे सेट कर सकते हैं:

  1. एक कस्टम RememberMeServices बनाएँ और <remember-me services-ref="myRememberMeServices"> का उपयोग कर इसे का उपयोग करें। अपनी बीन पर संपत्ति सेट करें।

  2. Use a BeanPostProcessor (see 1.8) डिफ़ॉल्ट RememberMeServices पर संपत्ति सेट करने के लिए।

+1

अब वसंत सुरक्षा 3.2.0.M2 - https://jira.springsource.org/browse/SEC-2119 – Eugen

+0

से शुरू होने वाले नामस्थान के माध्यम से कॉन्फ़िगर करना संभव है! धन्यवाद वसंत दोस्तों! – sourcedelica

3

आप BeanPostProcessor का उपयोग करना चाहिए सही गुण सेट करने के लिए:

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> 
:

के विचार है कि आप अपनी संपत्ति "myRememberMeProperty" कॉल करने के लिए

फिर अपने कोड इस तरह दिखना चाहिए चाहते हैं

उम्मीद है कि यह मदद करता है।

+0

मैंने एरिकैक के जवाब को स्वीकार कर लिया, क्योंकि मुझे लगता है कि यह अधिक सामान्य है। लेकिन मेरे विशेष मामले में, एक बीनपोस्टप्रोसेसर बीन का उपयोग करने का तरीका था और मैंने आपके उदाहरण का उपयोग किया .. तो बहुत बहुत धन्यवाद! ध्यान दें कि मैंने अपने कस्टम बीनपोस्टप्रोसेसर के भीतर से, StarRememberMeServices पर setCookieName() का उपयोग करके कुकी नाम को भी उसी तरह बदल दिया है! – electrotype

संबंधित मुद्दे