2011-08-24 8 views
6

Webアプリケーションでユーザーを認証するためにSpringセキュリティを使用したい.. Springフレームワークの成熟したユーザーではないので、jdbc-user-サービス..私は誰もがサンプル設定ファイルの問題を解決するために私を助けてください..canそのがSpringセキュリティでユーザを認証するためにmysqlデータベースを使用していますか?

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="myDataSource"/> 
    </authentication-provider>   
</authentication-manager> 
<beans:bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <beans:property name="url" value="jdbc:mysql://localhost:3306/testDB"/> 
    <beans:property name="username" value="admin"/> 
    <beans:property name="password" value="admin"/> 
</beans:bean> 

を働いていないconfigurations.but次のことを行っていた 。 ありがとうございます。

+0

あなたの問題は何ですか?スタックトレース、または直面している問題の明確な記述を投稿できますか? – beny23

答えて

6

通常はカスタムUserDetailsServiceで行います。 UserDetailsServiceは、ユーザーがログインしようとしたときにユーザーに関するデータを読み込むために使用されるDAOです。春のloadUserByUsername(String username)メソッドとUserDetailsクラスを見てください。

ヨは、あなたのコンテキストでそれを定義する必要があります。

<bean id="myDetailsService" 
    class="com.company.service.impl.MyDetailsService" /> 

あなたはセキュリティ設定にこれを追加することができ、それを使用するには:

<authentication-manager> 
    <authentication-provider user-service-ref="myDetailsService" /> 
</authentication-manager> 

をし、すべてのあなたのセキュリティフィルタは、それを使用します。

実装の手助けが必要な場合はさらに具体的な質問をすることができますが、IMOには問題はありません。

+0

uは、その実装についても簡単に説明することができます。 –

+0

あなたはその答えで提供されるリンクの実装についての詳細を見ることができます。 http://www.codercorp.com/blog/spring/security-spring/writing-custom-userdetailsservice-for-spring-security.html – Simeon

+0

はい..私はそれを得ました。 –

6

これを行う別の方法は、標準のスプリングセキュリティデータベーススキーマ(http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html)を使用してテーブルを作成することです。そして、あなたは、単に春のJDBC-UserServiceのを使用することができます。

<security:authentication-provider > 
    <security:jdbc-user-service data-source-ref="dataSource" /> 
    <security:password-encoder hash="sha" /> 
</security:authentication-provider> 

それとも、自分のスキーマを使用したい場合は、このようなクエリオーバーライドすることができます。

<security:authentication-provider> 
    <securiy:jdbc-user-service 
     data-source-ref="dataSource" 
     users-by-username-query="select username, password from users where username=?" 
     authorities-by-username-query="select username, roleName from role..." 
     role-prefix="ROLE_" 
    /> 
</security:authentication-provider> 
+0

このクエリは固定ですか?なぜなら、私のテーブルに従ってクエリを変更すると、これはうまくいかないため、このクエリに基づいてデザインするときにのみ機能します。 – RishiPandey

1

があなたの<authentication-provider>タグにこれらの行を追加します。 :

<authentication-provider> 
    <password-encoder hash="sha-256" /> 
    <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query=" 
       SELECT username, password, enabled 
       FROM user WHERE username = ?" 

      authorities-by-username-query=" 
       SELECT u.username, r.role_name 
       FROM user u, user_role r, assigned_role a 
       WHERE u.id = a.username 
       AND r.id = a.role_id 
       AND u.username = ?" 
     /> 
</authentication-provider> 

もちろん、テーブル名に合わせてクエリを微調整する必要があります。

関連する問題