はじめに
Spring解体新書 第2版の書籍にて学習を実施していました。
11章のSpringSecurityに関する部分だったのですが、書籍通りにソースを記述しても、エラーが解消されませんでした。
問題点
WebSecurityConfigurerAdapter
なんて存在しないよと怒られていました。。
サンプルソースとも全く同じなのに、、
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/** セキュリティの対象外を設定 */
@Override
public void configure(WebSecurity web) throws Exception {
// セキュリティを適用しない
web
.ignoring()
.antMatchers("/webjars/**")
.antMatchers("/css/**")
.antMatchers("/js/**")
.antMatchers("/h2-console/**");
}
/** セキュリティの各種設定 */
@Override
protected void configure(HttpSecurity http) throws Exception {
// ログイン不要ページの設定
http
.authorizeRequests()
.antMatchers("/login").permitAll() //直リンクOK
.antMatchers("/user/signup").permitAll() //直リンクOK
.anyRequest().authenticated(); // それ以外は直リンクNG
// CSRF対策を無効に設定(一時的)
http.csrf().disable();
}
}
調べる中での解決策
Spring公式ブログにより詳細な解説がありました
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
またこの方の記事で詳細的な内容を学ばせて頂きました。
最近(5.4〜6.0)のSpring Securityでは、セキュリティ設定の書き方が大幅に変わってみたいです。
(書籍は変更しないとですね、、)
https://qiita.com/suke_masa/items/908805dd45df08ba28d8
以下のように修正してみました。動いたので恐らく大丈夫です。。
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
public class SecurityConfig {
/** セキュリティの対象外を設定 */
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return web -> web.ignoring().requestMatchers(
new AntPathRequestMatcher("/webjars/**")
,new AntPathRequestMatcher("/css/**")
,new AntPathRequestMatcher("/js/**")
,new AntPathRequestMatcher("/h2-console/**"));
}
/** セキュリティの各種設定 */
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// ログイン不要ページの設定
http
.authorizeHttpRequests()
.requestMatchers("/login").permitAll() //直リンクOK
.requestMatchers("/user/signup").permitAll() //直リンクOK
.anyRequest().authenticated(); // それ以外は直リンクNG
// CSRF対策を無効に設定(一時的)
http.csrf().disable();
return http.build();
}
}