2012-10-29 38 views
22

में पहले से लॉग इन होने पर रीडायरेक्ट करें मैं वसंत के लिए नया हूं:वसंत सुरक्षा -

मैं प्रमाणित उपयोगकर्ता लॉगिन पृष्ठ तक पहुंचने से नहीं चाहता हूं। यदि उपयोगकर्ता पहले ही प्रमाणीकृत है तो '/ login' के लिए रीडायरेक्ट को संभालने का उचित तरीका क्या है? कहें, मैं पहले से लॉग इन होने पर '/ index' पर रीडायरेक्ट करना चाहता हूं।

मैंने लॉगिन पर 'isAnonomous()' की कोशिश की है, लेकिन यह अस्वीकृत पृष्ठ तक पहुंचने के लिए रीडायरेक्ट करता है।

<security:http auto-config="true" use-expressions="true" ...> 
    <form-login login-processing-url="/resources/j_spring_security_check" 
       default-target-url="/index" 
       login-page="/login" authentication-failure-url="/login?login_error=t" /> 
    <logout logout-url="/resources/j_spring_security_logout" /> 
    ... 
    <security:intercept-url pattern="/login" access="permitAll" /> 
    <security:intercept-url pattern="/**" access="isAuthenticated()" /> 
</security:http> 
+0

संभावित डुप्लिकेट [यदि उपयोगकर्ता लॉग इन होने के बाद लॉगिन पृष्ठ तक पहुंचता है तो मुखपृष्ठ पर रीडायरेक्ट कैसे करें?] (Http://stackoverflow.com/questions/12597519/how-to-redirect-to-the-homepage -फ-द-यूजर-एक्सेस-द-लॉगिन-पेज-बाद-होने) – Xaerxess

+0

http://stackoverflow.com/questions/32225414/spring-security-login-issue-after-re-login-in-same- सत्र/32325358 # 32325358 यह समस्या इस लिंक पर हल हो गई है। कृपया एक नज़र डालें – parshant

उत्तर

35

अपने प्रवेश पृष्ठ के नियंत्रक समारोह में:

  1. जांच एक उपयोगकर्ता के प्रवेश करता है, तो

  2. तो उस मामले में इंडेक्स पृष्ठ पर उसे अग्रेषित करें।।

प्रासंगिक कोड:

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

if (!(auth instanceof AnonymousAuthenticationToken)) { 

    /* The user is logged in :) */ 
    return new ModelAndView("forward:/index"); 
} 
+4

यह केवल लॉगिन -> घर जैसे मामलों के लिए काम करेगा। अगर मैं पहले से लॉग इन हूं और पता बार में लॉगिन यूआरएल टाइप करता हूं तो क्या होगा? होम पेज पर रीडायरेक्ट करने के लिए यह समझदारी होगी (या जहां भी मैं पहले से ही हूं) ... –

+0

यह मेरे लिए काम करता है। धन्यवाद – zameer

0

हे आप ऐसा कर सकते हैं।

<h:head> 
<sec:authorize access="isAuthenticated()"> 
    <meta http-equiv="refresh" content="0;url=http://your index.xhtml url (full url)" /> 
</sec:authorize> 
</h:head> 

यह विधि बहुत सरल और सुविधाजनक है, है ना?

1

login.xhtml

<h:head > 
    <f:metadata> 
     <f:event type="preRenderView" listener="#{loginBean.onPageLoad}"/> 
    </f:metadata> 
</h:head> 

loginBean

public void onPageLoad(){ 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    if (!(auth instanceof AnonymousAuthenticationToken)) { 
     try { 
      FacesContext.getCurrentInstance().getExternalContext().redirect(url); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
5

सफलतापूर्वक प्रवेश पृष्ठ रीडायरेक्ट करने के लिए, यदि उपयोगकर्ता पहले ही प्रवेश कर रहा है, अपने login.jsp को निम्नलिखित जोड़ें:

जोड़ें आपके जेएसपी के शीर्ष पर एक सुरक्षा टैगलिब हेडर:

<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%> 
,210

तब (शीर्ष के निकट अधिमानतः) अपने "सिर" टैग के अंदर निम्नलिखित टैग को जोड़ने:

<sec:authorize access="isAuthenticated()"> 
    <% response.sendRedirect("main"); %> 
</sec:authorize> 

यह main.html पर रीडायरेक्ट करेगा (या जो भी अपने मुख्य .jsp को मैप किया है), तो उपयोगकर्ता एक्सेस करना लॉगिन पेज पहले ही लॉग-इन है।

नियंत्रक के माध्यम से ऐसा करने के लिए मेरे लिए काम नहीं किया गया, क्योंकि वैध लॉगिन पृष्ठ अभ्यास वसंत सुरक्षा के "फॉर्म-लॉगिन" बीन को सभी पुनर्निर्देशित काम करने देना है, इसलिए मेरे लिए संशोधित करने के लिए कोई लॉगिन नियंत्रक नहीं था ।

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