ルークに同意します。ユーザー名とパスワードを 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>
春のセキュリティ構成
ログインの詳細を取得するために、春のセキュリティをユーザーデータベースに伝える必要があります。したがって、メモリ内の UserDetailsService である 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 はデータベースからユーザーの詳細を喜んで取得します。