2012-02-20 3 views
8

बस सरल प्रश्न: सफल प्रमाणीकरण पर HttpSession में विशेषताओं (गुण) को जोड़ने का सबसे अच्छा तरीका क्या है? उदाहरण के लिए उपयोगकर्ता आईडी।वसंत सुरक्षा: सफलता पर सत्र में अतिरिक्त विशेषताओं (गुण) डालें प्रमाणीकरण

अभी के लिए मैं UsernamePasswordAuthenticationFilter में अपने ही SimpleUrlAuthenticationSuccessHandler कार्यान्वयन का उपयोग कर रहा है और इस तरह यह कर:

public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication auth) 
      throws IOException, ServletException { 
     PersonBean person = (PersonBean) auth.getPrincipal(); 
     request.getSession().setAttribute("currentUserId", person .getId().toString()); 
     super.onAuthenticationSuccess(request, response, auth); 

लेकिन मुझे लगता है यह अच्छा तरीका है के रूप में वहाँ है प्रमाणीकरण करने के लिए एक और तरीके न (उदाहरण के लिए RememberMe) ।

तो मुझे यहां उपयोग करने की क्या ज़रूरत है?

उत्तर

5

उत्तर वसंत मंच पर दिया गया था। Link

आम तौर पर, एक एप्लिकेशन लिस्टनर को लागू करने की आवश्यकता होती है जो सफल घटनाओं के लिए सुनती है और सत्र में अतिरिक्त विशेषताओं को रखती है।

लेकिन मेरे मामले में सत्र में विशेषताओं को संग्रहीत करने की आवश्यकता नहीं है। मैं यहां उपयोगकर्ता आईडी को पुनः प्राप्त कर सकता हूं:

var userId = ${pageContext.request.userPrincipal.principal.id} 
-1

वसंत आपके लिए यह सब करता है, आपको एक टेबल * persistent_logins * बनाना होगा, यहां ऐप संदर्भ से एक स्निपेट है जो मदद कर सकता है। और आधिकारिक दस्तावेज़ के रखना describe in detail क्या जरूरत है:

<sec:authentication property="principal.username" /> 

:

<security:http auto-config='true'> 
    <security:intercept-url pattern="/**" access="ROLE_USER" /> 
    <security:form-login login-page="/Login" 
    authentication-success-handler-ref="authenticationSuccessHandler" 
    authentication-failure-url="/Login?login_error=1" /> 
    <security:remember-me data-source-ref="dataSource" 
    user-service-ref="myUserService" /> 
</security:http> 

और फिर आप अपने एप्लिकेशन में कहीं से भी प्राचार्य वस्तु का उपयोग कर सकते है, जैसे नीचे jsp में उत्पादन उपयोगकर्ता नाम करने के लिए टैग से पता चलता और आपके जावा कोड से यह किया जा सकता है:

MyUser user = (MyUser) authentication.getPrincipal(); 
+2

persistent_logins तालिका में सत्र में विशेषताओं को संग्रहीत करने के साथ वास्तव में कुछ भी नहीं है। यह सिर्फ एक विशेष याद है- मुझे कार्यान्वयन। यह प्रमाणीकरण ऑब्जेक्ट में अतिरिक्त कस्टम उपयोगकर्ता विशेषताओं को स्टोर करने के लिए समझ में आता है। –

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