6

Spring セキュリティを使用して、Web アプリケーションでユーザーを認証したいと考えています。Spring フレームワークの成熟したユーザーではないため、jdbc-user-service を使用するための構成設定を行う方法について明確なアイデアを得ることができません。私は次の構成を行っていましたが、機能していません

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

..サンプル構成ファイルで問題を解決するのを手伝ってくれる人はいますか。前もって感謝します。

4

3 に答える 3

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 で問題が発生することはありません。

于 2011-08-24T07:56:47.757 に答える
6

これを行う別の方法は、標準の Spring セキュリティ データベース スキーマ ( http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html ) を使用してテーブルを作成することです。次に、Spring の 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>
于 2011-08-24T10:45:14.437 に答える
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>

もちろん、テーブル名と一致するようにクエリを微調整する必要があります。

于 2012-06-08T13:42:57.463 に答える