BE/Spring
[Spring Security] URI에 따라 접근 권한 부여하기 최신 버전
Mingi Kim
2024. 3. 5. 17:54
본 포스팅은 Spring Security에서 URI별로 접근 권한을 다르게 부여하는 최신 방법을 다룹니다.
chatGPT에게 물어보면 아래와 같이 대답해줍니다. 하지만, 이는 deprecated된 방법이므로 최신 방법으로 사용해야합니다.
이전 방법
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
.antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
.antMatchers(HttpMethod.GET, "/lecture/**").permitAll() // lecture/1 URI에 대한 GET 메소드에 대해 모든 사용자 접근 가능
.antMatchers(HttpMethod.POST, "/lecture/**").hasAuthority("ROLE_ADMIN") // lecture/1 URI에 대한 POST 메소드에 대해 ROLE_ADMIN 권한 필요
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
)
return http.build();
}
최신 방법
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 기본 설정인 Session 방식은 사용하지 않고 JWT 방식을 사용하기 위한 설정
http.sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
.requestMatchers(HttpMethod.GET, "/lecture/**").permitAll()
.requestMatchers(HttpMethod.POST, "/lecture", "/tutor").hasAuthority("ROLE_ADMIN")
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
)
return http.build();
}
부가 설명
- "/swagger-ui/**", "/v3/api-docs/**" URI들은 모두 허용함. 이 설정은 외부에서 Swagger 페이지로 접속해야하기 때문에 열어놓음.
- "/lecture"로 시작하는 URI에서 get method는 모두 허용함. 즉, 로그인 하지 않아도 get method 사용 가능.
- "/lecture", "/tutor"의 post method를 사용할 때는 "ROLE_ADMIN" 권한이 있어야함.
- 그리고 나머지 URI는 로그인해야만 접근 가능.