2011-08-11 38 views
5

मैं वसंत के लिए नया हूँ और मेरी आवश्यकता के साथ प्राधिकरण है कि मैं उपयोगकर्ता नाम और पासवर्ड के साथ उपयोगकर्ता को प्रमाणित नहीं करना चाहती है। उपयोगकर्ता को प्रमाणित कुछ अन्य अनुप्रयोग है और मेरे ऐप folloing विवरण के साथ अनुरोध मिलता है:स्प्रिंग 3.0 सुरक्षा - प्रमाणीकरण

  1. उपयोगकर्ता नाम
  2. भूमिकाओं

मैं सिर्फ वसंत सुरक्षा का उपयोग के अनुसार पृष्ठों सुरक्षित करना चाहते हैं अनुरोध में भूमिकाएं। मैंने UserDetailService लिखने के बारे में एक विचार दिया है, लेकिन यह केवल अनुरोध-डेटा जोड़ता है, वसंत अभी भी प्रमाणीकरण जानकारी मांगता है। तो मैं निम्नलिखित की तरह कुछ लिखने के बारे में सोचा:

public class UserLogin { 

/* 
@Resource(name = "userDetailsService") 
private UserDetailsService userDetailsService; 
*/ 

@Resource(name = "authenticationManager") 
private AuthenticationManager authenticationManager; 

public boolean login(UserEntity user) { 

    //UserDetails ud = userDetailsService.loadUserByUsername(username); 

    Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
    for (String role : user.getAuthorities()) { 
     authorities.add(new GrantedAuthorityImpl(role)); 
    } 

    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword(), authorities); 

    try { 
     Authentication auth = authenticationManager.authenticate(token); 

     SecurityContext securityContext = new SecurityContextImpl(); 

     // Places in ThredLocal for future retrieval 
     SecurityContextHolder.setContext(securityContext); 
     SecurityContextHolder.getContext().setAuthentication(auth); 

    } catch (AuthenticationException e) { 
     return false; 
    } 

    return true; 
} 
} 

Am मैं सही दिशा में जा रहा है। यदि हां, तो पूरी चीज को कैसे कॉन्फ़िगर करें .. वसंत-एक्सएमएल में।

उत्तर

8

आप प्री-प्रमाणीकरण परिदृश्य कहलाते हैं, जहां आप स्प्रिंग सिक्योरिटी को केवल प्राधिकृत करने के लिए कॉन्फ़िगर करते हैं, एक्सेस प्रमाणीकरण नहीं। http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html देखें। यहां एक पूर्ण कॉन्फ़िगरेशन है, जहां आपको AbstractPreAuthenticatedProcessingFilter को अपनी प्रमाणीकरण योजना के UserPrincipal, और ऊपर उल्लिखित कस्टम UserDetailsService को लागू करने के लिए लागू करने की आवश्यकता है।

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

<security:global-method-security secured-annotations="enabled" /> 

<beans:bean id="preAuthenticatedProcessingFilterEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" /> 

<security:http auto-config="false" entry-point-ref="preAuthenticatedProcessingFilterEntryPoint"> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="myCustomPreAuthFilter" /> 
</security:http> 

<beans:bean id="myCustomPreAuthFilter" class="com.mypackage.MyCustomPreAuthFilter"> 
    <beans:property name="authenticationManager" ref="authenticationManager" /> 
</beans:bean> 

<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="preauthAuthProvider" /> 
</security:authentication-manager> 

<beans:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
    <beans:property name="preAuthenticatedUserDetailsService"> 
     <beans:bean id="userDetailsServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper"> 
      <beans:property name="userDetailsService" ref="myCustomUserDetailsService"/> 
     </beans:bean> 
    </beans:property> 
</beans:bean> 

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