개발정리

스프링 시큐리티-권한 부여(엑세스 제한) 본문

스프링/스프링 시큐리티

스프링 시큐리티-권한 부여(엑세스 제한)

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은 접근 불가능

 

 

 

참고:스프링 시큐리티 인 액션