스프링/스프링 시큐리티
스프링 시큐리티-권한 부여(엑세스 제한)
coffee.
2023. 9. 25. 14:41
권한 부여란?
식별된 클라이언트가 요청된 리소스에 엑세스할 권한이 있는지 시스템이 결정하는 프로세스
스프링 시큐리티에서 애플리케이션은 인증 흐름을 완료한 후 요청을 권한 부여 필터에 위임,
필터는 구성된 권한 부여 규칙에 따라 요청을 허용하거나 거부
userDetailsService로 사용자 세부정보 검색,
UserDetails의 getAuthorities()메서드는 여러개의 GrantedAuthority를 컬렉션으로 가진다.
권한 부여 예제
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello!";
}
}
/hello 엔드포인트에 접근했을 때 "Hello!"를 리턴하는 간단한 컨트롤러 입니다.
@Configuration
public class ProjectConfig {
@Bean
public UserDetailsService userDetailsService() {
var manager=new InMemoryUserDetailsManager();
var user1=User.withUsername("john")
.password("12345")
.authorities("READ")
.build();
var user2=User.withUsername("jane")
.password("12345")
.authorities("WRITE")
.build();
manager.createUser(user1);
manager.createUser(user2);
return manager;
}
@Bean
public PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
@Bean
public SecurityFilterChain filterChainV3(HttpSecurity http) throws Exception {
http.httpBasic();
http.authorizeRequests().anyRequest().hasRole("READ");
return http.build();
}
}
john에게는 READ권한을 부여하고 jane에게는 WRITE권한을 부여
현재 모든 엔드포인트는 "READ"권한을 가진 사용자만 접근 가능
->사용자 john은 접근 가능하지만 jane은 접근 불가능
참고:스프링 시큐리티 인 액션