해결된 질문
작성
·
2.1K
0
@Configuration
public class SecurityConfig {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers("/h2-console/**", "/favicon.ico");
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers("/api/hello").permitAll()
.anyRequest().authenticated()
.and()
.headers().frameOptions().disable()
.and()
.csrf().ignoringRequestMatchers("/h2-console/**").disable();
return http.build();
}
}
http://localhost:8080/h2-console 와 http://localhost:8080/favicon.ico 는 403 에러가 뜨고,
http://localhost:8080/api/hello 는 200 이 떠요.
무슨 문제인지 모르겠습니다 ㅠㅠ
답변 3
1
이렇게 한번 해보세요.
package me.silvernine.jwttutorial.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;
//@EnableWebSecurity
@Configuration // 어노테이션 없으면 작동하지 않음
public class SecurityConfig {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers("/h2-console/**", "/favicon.ico");
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers("/api/hello").permitAll()
.and()
.csrf().ignoringRequestMatchers(new AntPathRequestMatcher("/h2-console/**"))
.and()
.headers().frameOptions().disable()
;
return http.build();
}
}
0
안녕하세요 🙂
Spring Boot 3.4.0 (SNAPSHOT) 버전에 맞춰 샘플 코드를 업데이트했습니다.
아래 링크에서 Java와 Kotlin 버전의 최신 샘플 코드를 확인하실 수 있으니 참고 부탁드립니다.
Java : https://github.com/SilverNine/spring-boot-jwt-tutorial
Kotlin : https://github.com/SilverNine/spring-boot-jwt-tutorial-kotlin
0
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers(new AntPathRequestMatcher("/h2-console/**"))
.requestMatchers(new AntPathRequestMatcher("/favicon.ico"));
}
이렇게 작성하면 잘 동작합니다!
답변 감사합니다!
.anyRequest().authenticated() 가 들어가야 나머지 API들로 접근할 때 인증 제한을 둘 수 있는 걸로 알고 있습니다. 그런데 답변자님의 코드에는 .anyRequest().authenticated() 이 없어서 /h2-console/** 로 접근할 수 있는 것 같아요.
강의 코드에서는 .anyRequest().authenticated() 이 있는대도 /h2-console/** 로 접근할 수 있어서, 다음과 같이 바꿔 보았습니다.
이렇게 변경하고 작동하면 또 /h2-console/** 으로 접근이 불가능 하네요 ㅠㅠ
webSecurityCustomizer 문제인 것 같은데 여전히 잘 모르겠습니다.