개발 공부 기록
[Postman/Spring Security] 403 Forbidden 에러 본문
🚨 문제 발생
간단히 구현한 회원가입 로직을 테스트하기 위해 Postman을 이용하였습니다. 이때 제가 보낸 Post 요청에서 403 Forbidden 에러가 발생하였습니다.
💡 문제 원인
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.cors(AbstractHttpConfigurer::disable)
.sessionManagement(httpSecuritySessionManagementConfigurer -> {
httpSecuritySessionManagementConfigurer
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
})
.authorizeHttpRequests((authorizeRequests) -> authorizeRequests
.requestMatchers("/signup").permitAll()
.anyRequest().authenticated()
)
.build();
}
위는 SecurotyConfig의 일부분입니다. 403 에러에 관련해서 구글링을 했는데 대부분 csrf 설정을 disable해서 에러를 방지하였습니다. 하지만 저는 이미 csrf 설정을 disable 해놓은 상태였으므로, 요청에 대한 인가 규칙을 다시 설정하였습니다.
🔨 문제 해결
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.cors(AbstractHttpConfigurer::disable)
.sessionManagement(httpSecuritySessionManagementConfigurer -> {
httpSecuritySessionManagementConfigurer
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
})
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/api/user/**").hasRole("USER")
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
)
.build();
}
기존 코드에서도 회원가입은 모든 사용자에게 허용하기 위해 누구나 /signup 경로에 대한 요청을 할 수 있도록 하였습니다. 이번에는 /api/user/**와 /api/admin/**에 대해서만 역할 기반의 권한 검사를 하고, 나머지 요청은 permitAll()로 모든 요청을 허용하도록 하는 방식으로 수정하였더니 403 에러가 발생하지 않았습니다.
결국 두 코드의 전반적인 동작은 유사하지만, 약간의 차이가 있습니다.
기존 코드에서는 .anyRequest().authenticated()로 설정하여 /signup을 제외한 모든 요청을 인증된 사용자만 허용하는 규칙을 적용했습니다. 그러나 수정한 코드에서는 .anyRequest().permitAll()로 설정하여 특정 요청을 제외한 모든 요청을 인증 없이 허용하는 규칙을 적용했습니다.
즉 기존 코드에서는 인증되지 않은 사용자를 제한하는 반면, 수정한 코드에서는 모든 요청을 허용(인증과 관련없이 허용)하고 있기 때문에 403 Forbidden 에러가 발생하지 않았습니다.
'Spring > Trouble Shooting' 카테고리의 다른 글
@Value 사용 시 Cannot find method 'value' (0) | 2023.12.10 |
---|---|
400 Bad Request / Type definition error: [simple type, class cohttp://m.bobjeong.user.dto.request.SignupRequestDto]] (0) | 2023.12.05 |
java.lang.IllegalArgumentException: Invalid character found in method name 에러 (0) | 2023.11.30 |
SpringBoot 버전에 따른 Java 버전 (0) | 2023.09.09 |
A problem occurred configuring root project 'project_name' (0) | 2023.08.09 |