2

Spring Security 3.1.3 を使用して Web アプリケーションを保護しようとしています。

現在、security-app-context.xml にハードコーディングされたユーザーと連携する単純なログイン フォームをセットアップしました。今、私は春にデータベースからユーザーを検証しようとしていますが、それは問題がありました。
これまでに得た情報から、データソースの applicationContext.xml に Bean を配置し、security-app-context.xml ファイルでそのデータソースを参照する必要があります。

アプリケーションコンテキスト.xml:

<bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/webproject" />
  <property name="username" value="root" />
  <property name="password" value="root" />
</bean>

security-app-context.xml

<authentication-manager>
    <authentication-provider>            
        <jdbc-user-service data-source-ref="dataSource" />
    </authentication-provider>
</authentication-manager>

しかし、そうすると、データベースからのユーザー認証が機能しません。例外は発生していません。

データベースには、ユーザー (username,password,enabled) と権限 (username, roleName) の 2 つのテーブルがあります。何か不足していますか?

4

2 に答える 2

1

コメントを残すのに十分な評判がありません. とにかく正確な答えを与えるつもりはありません.

私はいくつかの推測をしています:

  • ロールのデータベース列名がロール名であることを確認してください。権威ではない?明示的に提供されていない場合、おそらくSpringはデフォルト名を探します。この行は、実行することが期待される正確なクエリを定義します。

    <authentication-manager>
                <authentication-provider>
                            <jdbc-user-service data-source-ref="dataSource" 
                   users-by-username-query="
                      select username,password, enabled 
                      from users where username=?" 
                   authorities-by-username-query="
                      select u.username, ur.authority from users u, user_roles ur 
                      where u.user_id = ur.user_id and u.username=?" 
                     />
                </authentication-provider>
    </authentication-manager>
    
  • セキュリティ フィルタを web.xml に追加しましたか?

  • または、テーブルにusersなどのデフォルト名を付ける必要がありますか??

于 2013-01-03T17:58:02.133 に答える
1

データベース スキーマが間違っています。列authoritiesはありませんが、代わりにroleName列がありauthorityます。ドキュメントによると、必要な SQL ステートメントは次のとおりです。

create table users(
    username varchar_ignorecase(50) not null primary key,
    password varchar_ignorecase(50) not null,
    enabled boolean not null);

create table authorities (
    username varchar_ignorecase(50) not null,
    authority varchar_ignorecase(50) not null,
    constraint fk_authorities_users foreign key(username) references users(username));
    create unique index ix_auth_username on authorities (username,authority);

ああ、Spring Security で問題が発生したときはいつでも、デバッグ ログを有効にすることをお勧めします。そこには多くの貴重な情報があります。

于 2013-01-03T21:48:55.133 に答える