반응형
시큐리티 설정은 맨날 해도 맨날 모르겠는 설정 중 하나인 것 같다.
포스팅을 하면서 다시 기본을 익히는 시간을 갖도록 해야겠다.
0. 참고 및 코드
해당 코드는 여기에서 확인 가능합니다. 😉
1. 환경
JAVA 8
Spring Boot 2.7.3
Spring Security 2.7.3
2. 기본 설정
1. build.gradle
implementation 'org.springframework.boot:spring-boot-starter-security'
2. SecurityConfig
spring security 5.7 이상 버전부터 WebSecurityConfigurerAdapter가 Deprecated되었다.
spring boot 2.7.3
은 spring-security 5.7.3
버전을 포함하고 있다. 따라서, 어댑터가 아닌 bean 등록방식으로 개발을 진행해야한다.
많이 달라지진 않았고, 기존 configure(WebSecurity web)
를 오버라이딩 한 코드를 filterChain(HttpSecurity security)
에 포함시켜주었다.
변경 전
@Configuration
@EnableWebSecurity(debug = false)
@RequiredArgsConstructor
@Slf4j
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final AuthenticationProvider authenticationProvider;
private final SecurityResourceService securityResourceService;
private final FilterChainExceptionHandler filterChainExceptionHandler;
private final CustomAuthenticationEntryPoint customAuthenticationEntryPoint;
private final CustomAccessDeniedHandler customAccessDeniedHandler;
private final TokenProvider tokenProvider;
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("스웨거나 docs 관련 url")
.antMatchers("css, js 관련 url")
;
}
@Override
protected void configure(HttpSecurity security) throws Exception {
// 관련 코드들..
}
}
변경 후
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity security) throws Exception {
security.csrf().disable()
.headers().frameOptions().disable();
security.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
security.authorizeHttpRequests()
.antMatchers("스웨거나 docs 관련 url","css, js 관련 url").permitAll()
.antMatchers("/admin").hasRole("ROLE_ADMIN")
.antMatchers("/**").permitAll()
.anyRequest().authenticated();
security.formLogin().disable();
security.httpBasic().disable();
return security.build();
}
}
해당 코드는 Rest API 개발을 바탕으로 작성하였기에 formLogin을 disable 해주었다.
3. 테스트
/admin
url은 ROLE_ADMIN
만, 나머지 url은 모두 접근 가능하도록 간단하게 설정해주었다.
컨트롤러를 만들어 테스트를 돌린결과, /admin
에는 403
이, /user
에는 200
의 결과가 잘 발생하였다.
/admin
/user
반응형
'개발 일기 > spring' 카테고리의 다른 글
Spring Security 설정 (JWT 2) (0) | 2022.08.31 |
---|---|
Spring Security 설정 (JWT 1) (2) | 2022.08.31 |
Spring 에러 발생 시, Slack 알람 만들기 (0) | 2022.08.11 |
특정 API만 Swagger에 노출 (0) | 2022.08.11 |
Spring-Elasticsearch 연동 2 - Query Builder (0) | 2022.08.11 |
댓글