2012-01-11 22 views
4

私は、簡単なユーザ名/パスワード認証をSpring Security Webアプリケーションで作成しようとしています。私は、ユーザー名/パスワードを渡すことによって認証し、ロールを返すWebサービスを持っています。それから私は、将来のWebサービス呼び出しのためにパスワードを保持する必要があります。ユーザ名パスワード春のセキュリティでの認証

私のアプリは最初はApp Fuseで作成されていたので、JDBCベースの認証がありました。私はそれをリッピングしましたが、自分のカスタム認証を追加する方法がわかりません。

ドキュメントには、それは"simple" to add in such a mechanismと書かれています。しかし、このサンプルアプリケーションは、コマンドラインのhello-worldスタイルのプログラムであり、Webアプリケーションではありません。 Webアプリケーションでユーザー名/パスワード認証の例が見つからないようです。

私は私のXMLファイルに次の持っている:

<beans:bean id="myProvider" class="com.example.MyProvider"></beans:bean> 

<authentication-manager> 
    <authentication-provider ref="myProvider"></authentication-provider> 
</authentication-manager> 

これはで私の認証を置くための適切な場所であれば、私は知らない、と私は、実装がどのようなインタフェースはよく分かりません。私はAuthenticationManagerを実装する必要があるかもしれないと思う。そしてUsernamePasswordAuthenticationTokenを使用します。

これをどのようにまとめますか?

+0

[詳細はこちら](http://techastute.blogspot.com/2013/01/spring-security-in-detail.html)でSpringSecurityの一部を構成しています。あるもの。 – raksja

答えて

4

私はそれが今取り組んで持っています。皆さん、助けていただきありがとうございます。私は新しい認証プロバイダを追加し、それを認証マネージャに接続する必要がありました。ここに私が追加してしまったものです:

<beans:bean id="authenticationManager" 
    class="org.springframework.security.authentication.ProviderManager"> 

    <beans:property name="providers"> 
    <beans:list> 
     <beans:ref local="myAuthenticationProvider"/> 
    </beans:list> 
    </beans:property> 
</beans:bean> 

<beans:bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider"> 
</beans:bean> 

<authentication-manager> 
    <authentication-provider ref="myAuthenticationProvider"/> 
</authentication-manager> 

とMyAuthenticationProvider(例から取られた)がある:私は、後にユーザー名/パスワードの実際の検証を追加します

public class AConnexAuthenticationProvider implements AuthenticationProvider { 

    static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); 

    static { 
     AUTHORITIES.add(new GrantedAuthorityImpl("ROLE_USER")); 
    } 

    @Override 
    public Authentication authenticate(Authentication auth) 
      throws AuthenticationException { 
     return new UsernamePasswordAuthenticationToken(auth.getName(), auth.getCredentials(), AUTHORITIES); 
    } 

    @Override 
    public boolean supports(Class<? extends Object> paramClass) { 
     return true; 
    } 
} 

。これは誰にでも許可します。

+0

何らかの理由で、 ''要素によって作成されたものと実際に別々の 'ProviderManager'が必要ですか?通常は、両方を必要としません。 –

+0

ありがとう、私はそのブロックを削除し、まだ動作しているので、私はそれを必要としなかったと思います。 –

1

あなたのプロバイダがUserDetailsServiceを実装し、UserDetailsオブジェクトを返すために

public UserDetails loadUserByUsername(String username) 

メソッドをオーバーライドする必要があります。これはあなたの "ユーザー"オブジェクトが何であれ実装することができるインターフェイスです。これは、いくつかの方法がオーバーライドする必要がありますが、あなたの視点から重要な一つは、あなたの役割の一覧を返すために実装

public Collection<GrantedAuthority> getAuthorities() 

です。

2

これは私のsecurity.xmlです。ユーザーの構成を見てください。私はちょうどパスを処理するためのコントローラを追加し、それは正常に動作します。

<http auto-config="true"> 
    <intercept-url pattern="/admin/**" access="IS_AUTHENTICATED_REMEMBERED"/> 
    <intercept-url pattern="/welcome/**" access="IS_AUTHENTICATED_REMEMBERED" /> 
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <form-login login-page="/login" /> 
    <logout logout-success-url="/" logout-url="/logout" /> 
    <!-- Limits the number of concurent sessions a user can have 
    <concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/> 
--> 
</http> 


<!-- 
Usernames/Passwords are 
    rod/koala 
    dianne/emu 
    scott/wombat 
--> 

<authentication-manager> 
    <authentication-provider> 
     <password-encoder hash="md5"/> 
     <user-service> 
      <user name="rod" password="a564de63c2d0da68cf47586ee05984d7" authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" /> 
      <user name="dianne" password="65d15fe9156f9c4bbffd98085992a44e" authorities="ROLE_USER,ROLE_TELLER" /> 
      <user name="scott" password="2b58af6dddbd072ed27ffc86725d7d3a" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

私のためにあなたのweb.xmlに

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

作品を追加する方法について覚えておいてください:)

関連する問題