2009-07-23 7 views
3

現在、私はSpring Securityを使用してWebアプリケーションを作成しています。私たちには、ユーザー名とパスワードでユーザーを認証するWebサービスがあります。ユーザー名とパスワードが必要なWebServiceを使用してSpringSecurityでユーザーを認証する

Webサービス:私は春のセキュリティは、Webサービスに提供されたユーザ名とパスワードを渡すように設定するにはどうすればよい
String[] login(String username, String password);

私はUserDetailsServiceと書いてあり、ユーザー名のみを受け取っています。


私は問題があなたのXMLにあると思います。自動設定を無効にしましたか?あなたのクラスはAbstractUserDetailsAuthenticationProviderを拡張していますか?

答えて

4

org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProviderを拡張

私は、次のクラスに書かれている
/** 
* @author rodrigoap 
* 
*/ 
public class WebServiceUserDetailsAuthenticationProvider extends 
    AbstractUserDetailsAuthenticationProvider { 

    @Override 
    protected UserDetails retrieveUser(String username, 
     UsernamePasswordAuthenticationToken authentication) 
     throws AuthenticationException { 
    //Improve this line: 
    String password = authentication.getCredentials().toString(); 
    // Invoke your webservice here 
    GrantedAuthority[] grantedAuth = loginWebService.login(username, password); 
    // create UserDetails. Warning: User is deprecated! 
    UserDetails userDetails = new User(username, password, grantedAuth); 
    return userDetails; 
    } 

} 
0

UserDetailsS​​erviceのアイデアは、その実装がそのユーザ名を持つユーザを表すUserDetailsオブジェクトを提供し、Spring Securityがクレデンシャルのチェックを処理するということです。

この種の設計がバックエンドでうまく動作しない場合は、パスワードとしてパラメータを指定する必要があるため、独自のAuthenticationProviderの実装を検討する必要があります。

4

@Override 
protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken token) throws AuthenticationException { 
    try { 
     server = (PncUtilRemote) new InitialContext().lookup("PncUtilBean"); 
     if (server != null) { 
      String password = SHA1(token.getCredentials().toString()); 
      String[] auth = server.login(username, password); 
      if (auth.length > 0) { 
       PncUserDetails details = new PncUserDetails(username, password); 
       for (int i = 0; i < auth.length; i++) { 
        details.addAuthority(auth[i]); 
       } 
       return details; 
      } 
     } 
    } catch (Exception e) { 
     System.out.println("! " + e.getClass().getName() + " in com.logica.pnc.security.PncUserDetailsAuthenticationProvider.retrieveUser(String, UsernamePasswordAuthenticationToken): " + e.getMessage()); 
    } 
    throw new BadCredentialsException(""); 
} 

:recieveUserのMethodeのを実装し

PncUserDetailsAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider

はあなたのアプリケーション-context.xmlファイルにいくつかの行を追加する必要があり、あなたのAuthenticationProviderを有効にするには、次へ

 
<security:http auto-config="false" /> 

ありがとう:

 
<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager"> 
    <property name="providers"> 
     <list><ref local="PncAuthenticationProvider" /></list> 
    </property> 
</bean> 

<bean id="PncAuthenticationProvider" class="com.logica.pnc.security.PncUserDetailsAuthenticationProvider"> 
    <security:custom-authentication-provider /> 
</bean> 

あなたがfalseに自動設定を設定することが重要ですrodrigoapを指してAuthenticationProviderのことを:

関連する問題