未認証ユーザのみアクセス可能な画面を作る

記事名の通り、未認証のユーザ(ログインしていないユーザ)のみアクセス可能な画面を作る方法について。

環境

  • 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();
		
		// 省略
	}
}

参考