構成要素†
処理系†
AuthenticationFilter | 一番大外のフィルター |
AuthenticationManager | フィルターから呼ばれ、認証処理を行うProviderを呼び出す |
AuthenticationProvider | 認証処理 |
AuthenticationSuccessHandler | 認証成功時に呼ばれる。標準実装ありSavedRequestAwareAuthenticationSuccessHandlerがデフォルトで以前のURLに認証後に飛ばす |
AuthenticationFailureHandler | 失敗時のHandler。こちらも標準実装あり例外ごとに処理を分けてくれるやつとか便利そうだ。 |
DTO系†
ユーザー情報 | org.springframework.security.core.userdetails.User | 認証以外の情報を持たせるなら継承せよ |
大元の設定†
WebSecurityConfigurerAdapterを継承したものを定義しておく。
BASIC認証†
http://tnakamura.hatenablog.com/entry/2017/06/22/spring-security-basic-authentication
DB認証†
コンポーネント†
Authentication-manager | 認証処理を行うが、実際の処理はproviderに委譲 |
Authentication-provider | 実際の認証処理を行う。ユーザー認証はまたUserDetailServiceへ |
UserDetailsService | デフォルト実装としてメモリベースやJDBCが容易されている。 |
認証要否†
Configでパス単位で設定するか、各クラスで@PreAuthorize
permitAll | 認証不要 |
isAuthenticated() | 認証必須 |
設定例†
http
.authorizeRequests()
.antMatchers("/css/**", "/fonts/**", "/js/**").permitAll()
.anyRequest().authenticated();
JDBCを使う場合†
テーブル定義†
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),
CONSTRAINT UK_AUTHORITIES UNIQUE (USERNAME, AUTHORITY)
);
INSERT INTO USERS VALUES ('fuga', 'FUGA', true);
INSERT INTO AUTHORITIES VALUES ('fuga', 'USER');
アノテーション†
XML†
OAuth2†
- OAuth2ClientAuthenticationProcessingFilter