[spring security basic] 7. 권한 설정 및 표현식
권한 설정 및 표현식
1. 권한 설정 및 표현식 코드
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain fileterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth ->
auth
.requestMatchers("/login").permitAll() // 모두 허용
.requestMatchers("/user").hasRole("USER")
.requestMatchers("/admin/pay").hasRole("ADMIN")
.requestMatchers("/admin/**").hasAnyRole("ADMIN", "SYS") // 여러 권한들을 넣을 수 있다.
.anyRequest().authenticated() // 인증된 사용자면 어떠한 요청에서도 허용
);
return http.build();
}
@Bean
public UserDetailsService users(){
UserDetails user = User.builder()
.username("user")
.password("{noop}1111")
.roles("USER")
.build();
UserDetails manager = User.builder()
.username("manager")
.password("{noop}1111")
.roles("MANAGER")
.build();
UserDetails admin = User.builder()
.username("admin")
.password("{noop}1111")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, manager, admin);
//{noop} : 어떠한 암호화를 했는 지 알려주는 것을 prefix로 붙여주는 것이다.
//{noop} 이 뭔지 설정을 안하면 "DelegatingPasswordEncoder" 클래스에서 default 값이 따로 있어서 자동으로 설정이 된다.
}
}
2. 권한 설정의 자세한 설명
authorizeHttpRequests
에 설정한 auth 는 위부터 순서대로 적용이 된다.
그러기 때문에 설정 시 구체적인 경로가 먼저오고 큰 범위의 경로가 뒤에 오도록 해야 한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
http
.authorizeHttpRequests(auth ->
auth
.requestMatchers("/").authenticated() //인증된 사용자의 접근을 허용
.requestMatchers("/").fullyAuthenticated() //인증된 사용자(ID, PWD로 로그인한 유저)의 접근을 허용, rememberMe 인증 제외
.requestMatchers("/").permitAll() //무조건 접근을 허용
.requestMatchers("/").denyAll() //무조건 접근을 허용하지 않음
.requestMatchers("/").anonymous() //익명사용자("ROLE_Anonymous" 권한을 가진 사용자만)의 접근을 허용
.requestMatchers("/").rememberMe() //리멤버미를 통해 인증된 사용자의 접근을 허용
.requestMatchers("/").hasRole("USER") //사용자가 주어진 역할이 있다면 접근을 허용 (prefix인 "ROLE_" 이 붙지않은)
.requestMatchers("/").hasAuthority("ROLE_USER") //사용자가 주어진 권한이 있다면(prefix인 "ROLE_" 이 붙은)
.requestMatchers("/").hasAnyRole("ADMIN", "SYS") //사용자가 주어진 권한이 있다면 접근을 허용(권한 여러 개 가능)
.requestMatchers("/").hasAnyAuthority("ROLE_ADMIN", "ROLE_SYS") //사용자가 주어진 권한이 있다면 접근을 허용(권한 여러 개 가능)
);
}
Comments