2011-08-11 15 views
5

Jestem nowy w Spring i moim wymaganiem jest to, że nie chcę uwierzytelniać użytkownika przy użyciu nazwy użytkownika i hasła. Użytkownik jest Uwierzytelnij jest jakaś inna aplikacja i moja aplikacja uzyskać prośbę wraz folloing szczegóły:Wiosna 3.0 Bezpieczeństwo - Autoryzacja z uwierzytelnianiem

  1. Nazwa użytkownika
  2. Role

Chcę użyć Wiosna zabezpieczeń w celu zabezpieczenia stron zgodnie z role w żądaniu. Myślałem o pisaniu UserDetailService, ale to tylko dodaje dane żądania, Spring wciąż prosi o informacje uwierzytelniające. Wtedy pomyślałem o napisaniu czegoś tak:

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

idę we właściwym kierunku. Jeśli tak, jak skonfigurować całość ... w wiosennym xml.

Odpowiedz

8

Jesteś w tak zwanym scenariuszu wstępnego uwierzytelniania, w którym możesz skonfigurować Spring Security tylko do autoryzacji dostępu, a nie uwierzytelniania dostępu. Zobacz http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html. Oto pełna konfiguracja, w której należy zaimplementować AbstractPreAuthenticatedProcessingFilter, aby zapoznać się ze schematem uwierzytelniania UserPrincipal i niestandardowym UserDetailsService, o którym wspomniano powyżej.

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

Powiązane problemy