1

spring 3 セキュリティを介してユーザーの承認を実装することを考えています。ユーザー名とパスワードが次のような XML ファイルに保存されていることは知っています。

<authentication-manager>
  <authentication-provider>
    <user-service>
       <user name="username" password="123456" authorities="ROLE_USER" />
    </user-service>
  </authentication-provider>
</authentication-manager>

しかし、どうやってユーザーを追加したり、パスワードを変更したりするのだろうか? 誰か見せてくれませんか?

4

2 に答える 2

2

このuser-service要素は、InMemoryUserDetailsManagerユーザーを変更し、パスワードを変更するためのメソッドを持つ を作成します。

ただし、XML でユーザーを定義することは、実際にはテストのみを目的としています。ユーザー情報を追加および更新できるようにする場合は、データベースを使用する必要があります。標準の Spring Security データベース スキーマは、リファレンス マニュアルに記載されています。

次に、JDBCUserDetailsManager実装を使用するか、独自のカスタム データ管理コードを作成できます。

于 2013-03-09T21:56:01.143 に答える
1

ルークに同意します。ユーザー名とパスワードを XML に保存することはお勧めできません。ユーザーの詳細をデータベースに保存して、変更を追加できるようにします。

データベースの作成

CREATE TABLE IF NOT EXISTS users (
     username VARCHAR(10) NOT NULL,  
     password VARCHAR(32) NOT NULL,
     enabled BOOLEAN NOT NULL,
     PRIMARY KEY (username)  
);  

CREATE TABLE IF NOT EXISTS authorities (  
     username VARCHAR(10) NOT NULL,  
     authority VARCHAR(10) NOT NULL,  
     FOREIGN KEY (username) REFERENCES users(username)
); 

insert into users(username,password,enabled) values ('abc','123456',TRUE);   
insert into authorities(username,AUTHORITY) values ('abc', 'ROLE_USER');

ここで、テーブル名、列名は、Spring Security のデフォルト クエリ (「select username, password, enabled from users where username = ?」) に従って使用されます。デフォルト名を使用する場合、ユーザーの詳細を取得するためにクエリを明示的に指定する必要がないためです。詳細については、 Spring Security のドキュメントを確認してください。

情報源

spring security はデータベースに接続してユーザーの詳細を取得する必要があるため、データソース Bean を次のように定義する必要があります。そのため、ドライバー、データベース URL、ユーザー名、およびパスワードを指定する必要があります。例えば以下のように。

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
    <property name="url" value="jdbc:hsqldb:hsql://localhost/elab" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

春のセキュリティ構成

ログインの詳細を取得するために、春のセキュリティをユーザーデータベースに伝える必要があります。したがって、メモリ内の UserDetailsS​​ervice である user-service の代わりに、「jdbc-user-service」を使用します。これで、認証マネージャーは次のようになります。

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

ユーザー テーブル構造が、Spring がデフォルトで期待する方法と異なる場合は、クエリを jdbc-user-service 要素のプロパティ (users-by-username-query) として明示的に指定する必要があることに注意してください。詳細については、ドキュメントを参照してください。

これですべての設定が完了し、Spring はデータベースからユーザーの詳細を喜んで取得します。

于 2013-03-13T05:46:31.707 に答える