2012-08-13 10 views
12

मैंने देखा है कि इस विषय के बारे में कुछ प्रश्न पूछ रहे हैं। मैंने उन्हें देखा और मैं उन्हें अपने विशिष्ट वसंत सेटअप पर लागू करने में असमर्थ था। मैं उपयोगकर्ता की भूमिका के आधार पर, मेरे लॉगिन रीडायरेक्ट को सशर्त होने के लिए कॉन्फ़िगर करना चाहता हूं। यह वही है मैं अब तक है:वसंत सुरक्षा सशर्त डिफ़ॉल्ट-लक्ष्य-यूआरएल

<http auto-config="true" use-expressions="true"> 
     <custom-filter ref="filterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR"/> 
     <access-denied-handler ref="accessDeniedHandler"/> 
     <form-login 
      login-page="/login" 
      default-target-url="/admin/index" 
      authentication-failure-url="/index?error=true" 
      /> 
     <logout logout-success-url="/index" invalidate-session="true"/> 
</http> 

मैंने सोचा था कि this question मैं क्या कर रहा हूँ के रूप में एक ही पंक्ति में हो सकता है। किसी को पता है कि मैं इसे कैसे लागू कर सकता हूं?

संपादित करें 1

<bean id="authenticationProcessingFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> 
    <property name="authenticationManager" ref="authenticationManager" /> 
    <property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/> 
</bean> 
<bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler"> 
    <property name="defaultTargetUrl" value="/login.jsp"/> 
</bean> 

संपादित 2

वर्तमान में मैं public class Test implements AuthenticationSuccessHandler {} की तरह एक वर्ग के रूप में दिखाया गया है this example जरूरत नहीं है।

+3

आपका प्रश्न के समान है [यह एक] (http://stackoverflow.com/questions/7470405/authenticationsuccesshandler-example-for-spring-security-3) –

+0

धन्यवाद। क्या आप कृपया ** संपादित 1 ** की जांच कर सकते हैं। मैं भ्रमित हो रहा हूं क्योंकि मैं पहले से ही उस बीन के लिए वसंत वर्ग आवंटित कर रहा हूं? – ThreaT

+0

कोई प्रमाणीकरण फॉर्म-लॉग इन नहीं है SUccessHandler? http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html –

उत्तर

20

मैं कोड का परीक्षण किया है और यह काम करता है, वहाँ में यह अपनी सुरक्षा के संदर्भ में

public class MySuccessHandler implements AuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication) 
      throws IOException, ServletException { 
     Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities()); 
     if (roles.contains("ROLE_ADMIN")){ 
      response.sendRedirect("/Admin.html"); 
      return; 
     } 
     response.sendRedirect("/User.html"); 
    }  
} 

परिवर्तन नहीं रॉकेट विज्ञान है: अद्यतन

<bean id="mySuccessHandler" class="my.domain.MySuccessHandler"> 
    </bean> 

<security:form-login ... authentication-success-handler-ref="mySuccessHandler"/> 

आप default-target-url दृष्टिकोण का उपयोग करना चाहते हैं, यह समान रूप से अच्छी तरह से काम करेगा, लेकिन जब आपका उपयोगकर्ता पहले लॉगिन पृष्ठ तक पहुंचता है तो ट्रिगर किया जाएगा:

<security:form-login default-target-url="/welcome.htm" />

@Controller 
public class WelcomeController { 
    @RequestMapping(value = "/welcome.htm") 
    protected View welcome() { 

     Set<String> roles = AuthorityUtils 
       .authorityListToSet(SecurityContextHolder.getContext() 
         .getAuthentication().getAuthorities()); 
     if (roles.contains("ROLE_ADMIN")) { 
      return new RedirectView("Admin.htm"); 
     } 
     return new RedirectView("User.htm"); 
    } 
} 
+0

क्या होगा अगर मैं किसी अन्य डोमेन पर रीडायरेक्ट करना चाहता हूं? @ बोरीस ट्रेखोव – Mahdi

+1

यदि कोई स्प्रिंट संदर्भ के लिए जावा कोड का उपयोग कर रहा है: 'formLogin()। Success सफलता हैडलर (नया MySuccessHandler()) ' – RAS

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