未認証ユーザのみアクセス可能な画面を作る
記事名の通り、未認証のユーザ(ログインしていないユーザ)のみアクセス可能な画面を作る方法について。
環境
- Spring Boot: 2.3.3
- Spring Security: 5.3.4
方法
Webセキュリティ式の一つであるisAnonymousは、@PreAuthorizeに指定することができません。
指定しても設定が反映されず、認証済みのユーザでアクセスできてしまいます。
未認証ユーザのみアクセスできる画面を作るには、WebSecurityConfigurerAdapterクラスを拡張したJava Configで下記のようにアクセス制御を指定する必要があります。
.antMatchers("/login").anonymous()
実装例
以下の例では、ログインページは未認証のユーザのみアクセスできるようにしています。
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// ログイン不要ページの設定
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/login").anonymous()
// 省略
.anyRequest().authenticated();
// 省略
}
}