2013-05-08 3 views
0

Мы используем пружину 2.5. У нас есть общие веб-службы для аутентификации пользователя, который вводит имя пользователя и пароль в качестве ввода и возвращает true или false после проверки пароля. Как и где мы должны реализовать этот вызов веб-службы? Ответьте, пожалуйста. СпасибоКак реализовать пользовательскую аутентификацию с использованием Spring 2.5

Прямо сейчас у нас есть следующая конфигурация пружины. мы хотим включить в него вызов webservice.

<intercept-url pattern="/service/**" access="ROLE_ANONYMOUS, ROLE_LEARNER,ROLE_TRAININGADMINISTRATOR,ROLE_LMSADMINISTRATOR,ROLE_REGULATORYANALYST,ROLE_INSTRUCTOR"/> 

    <logout invalidate-session="true" logout-success-url="/login.do"/> 
    <anonymous /> <http-basic /> <remember-me /> 
</http> 
<b:bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> 
    <b:property name="loginFormUrl" value="/login.do"/> 
    <b:property name="forceHttps" value="false" /> 
</b:bean> 
<authentication-manager alias='authenticationManagerAlias'/> 

<b:bean id="myAuthenticationProcessingFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter"> 
    <b:property name="defaultTargetUrl" value="/interceptor.do"/> 
    <b:property name="authenticationFailureUrl" value="/login.do"/> 
    <b:property name="authenticationManager" ref="authenticationManagerAlias"/> 
    <b:property name="authenticationDetailsSource" ref="vu360UserAuthenticationDetailsSource"/> 
    <b:property name="alwaysUseDefaultTargetUrl" value="true"/> 
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/> 
</b:bean>  

<b:bean class="org.springframework.security.providers.dao.DaoAuthenticationProvider"> 
    <b:property name="userDetailsService" ref="userDetailsService"/> 
    <b:property name="passwordEncoder" ref="passwordEncoder"/> 
    <b:property name="saltSource" ref="saltSource"/> 
    <custom-authentication-provider/> 
</b:bean> 
<b:bean class="org.springframework.security.providers.dao.DaoAuthenticationProvider"> 
    <b:property name="userDetailsService" ref="userDetailsService"/> 
    <custom-authentication-provider/> 
</b:bean> 

+0

Я предполагаю, что вы используете 'UsernameAndPasswordAuthenticationFilter' и тому пользователь вводит имя пользователя/пароль в форме? Можете ли вы опубликовать текущую конфигурацию безопасности пружины? – clav

ответ

0

Если вы хотите для управления аутентификацией себя, вы можете создать свой собственный AuthenticationManager, который вызывает веб-службы и ввести его в AuthenticationProcessingFilter. Вот пример custom AuthenticationManager, очевидно, вам нужно будет заменить примерный вызов службы любым кодом, который вы используете для вызова вашего фактического сервиса.

public class CustomWebServiceAuthenticationManager implements AuthenticationManager { 

    public Authentication authenticate(Authentication credentials) throws AuthenticationException { 
     String username = credentials.getName(); 
     String password = (String)credentials.getCredentials(); 

     // change this to your actual web service call 
     boolean successfulAuthentication = myWebService.authenticate(username, password); 
     if(successfulAuthentication) { 
      // do whatever you need to do to get the correct roles for the user, this is just an example of giving every user the role "ROLE_LEARNER" 
      List<GrantedAuthority> roles = Collections.singletonList(new SimpleGrantedAuthority("ROLE_LEARNER")); 
      return new UsernamePasswordAuthenticationToken(username, password, roles); 
     } else { 
      throw new AuthenticationException("Authentication failed, invalid username or password"); 
     } 
    } 
} 

Затем добавьте CustomWebServiceAuthenticationManager в конфигурацию весной и ссылаться на него в AuthenticationProcessingFilter.

<b:bean id="customWebServiceAuthenticationManager" class="CustomWebServiceAuthenticationManager"/> 

<b:bean id="myAuthenticationProcessingFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter"> 
    <b:property name="defaultTargetUrl" value="/interceptor.do"/> 
    <b:property name="authenticationFailureUrl" value="/login.do"/> 
    <b:property name="authenticationManager" ref="customWebServiceAuthenticationManager"/> 
    <b:property name="authenticationDetailsSource" ref="vu360UserAuthenticationDetailsSource"/> 
    <b:property name="alwaysUseDefaultTargetUrl" value="true"/> 
<custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/> 

2

Реализует один CustomAuthenticationProvider нравится:

import com.google.common.collect.Lists; 
import java.util.List; 
import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.springframework.security.authentication.AuthenticationProvider; 
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 
import org.springframework.security.core.Authentication; 
import org.springframework.security.core.AuthenticationException; 
import org.springframework.security.core.GrantedAuthority; 

public class CustomAuthenticationProvider implements AuthenticationProvider { 

public final static Logger log = LogManager.getLogger(CustomAuthenticationProvider.class.getName()); 

@Override 
public Authentication authenticate(Authentication authentication) 
     throws AuthenticationException { 
    List<GrantedAuthority> AUTHORITIES = Lists.newArrayList(); 
    AUTHORITIES.add(new GrantedAuthority() { 
     @Override 
     public String getAuthority() { 
      return "ROLE_ADMIN"; 
     } 
    }); 

     return new UsernamePasswordAuthenticationToken(authentication.getName(), authentication.getCredentials(), AUTHORITIES); 
} 

@Override 
public boolean supports(Class<? extends Object> authentication) { 
    return authentication.equals(UsernamePasswordAuthenticationToken.class); 
} 

}

и

<authentication-manager> 
    <authentication-provider ref="customAuthenticationProvider" > 
    </authentication-provider> 
</authentication-manager> 
<beans:bean id="customAuthenticationProvider" class="com.xkey.principal.CustomAuthenticationProvider"/> 
+0

Пользовательский поставщик аутентификации используется только для получения информации о пользователе, на самом деле он не выполняет аутентификацию - это делает менеджер аутентификации. Поскольку его веб-служба выполняет аутентификацию, ему необходимо создать пользовательский диспетчер auth, чтобы он мог контролировать, был ли пользователь успешно аутентифицирован. – clav

Смежные вопросы