[Spring Security] URI에 따라 접근 권한 부여하기 최신 버전
2024. 3. 5. 17:54ㆍBE/Spring
728x90
본 포스팅은 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는 로그인해야만 접근 가능.
'BE > Spring' 카테고리의 다른 글
[Spring JPA] 영속성 컨텍스트의 기능 (2) | 2024.03.07 |
---|---|
[Spring Security] 최신! 로그인 결과를 ResponseBody에 나타내는 법 (0) | 2024.03.05 |
[Spring] Failed to load remote configuration. (0) | 2024.03.01 |
[Spring] 의존성 주입(DI)과 제어의 역전(IoC) (0) | 2024.02.25 |
[Spring] 초간단! 인자의 종류 (0) | 2024.02.24 |