Published 2023. 4. 16. 20:46
권한 설정
http.antMatchers("{url}").hasRole(“{role}") 와 같이 설정이 가능하다.
http
.authorizeRequests()
.antMatchers("/login").permitAll() // login 페이지는 인증이 안돼도 접근이 가능해야하기 때문에
.antMatchers("/user").hasRole("USER")
.antMatchers("/admin/pay").hasRole("ADMIN")
.antMatchers("/admin/**").access("hasRole('ADMIN') or hasAnyRole('sys')") //표현식을 사용해 두개이상의 권한을 설정
.anyRequest().authenticated();
※ 주의 사항 - 설정 시 구체적인 경로가 먼저 오고 그것 보다 큰 범위의 경로가 뒤에 오도록 해야 한다
메소드 | 동작 |
authenticated() | 인증된 사용자의 접근을 허용 |
fullyAuthenticated() | 인증된 사용자의 접근을 허용, rememberMe 인증 제외 |
permitAll() | 무조건 접근을 허용 |
denyAll() | 무조건 접근을 허용하지 않음 |
anonymous() | 익명사용자의 접근을 허용 |
rememberMe() | 기억하기를 통해 인증된 사용자의 접근을 허용 |
access(String) | 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용 |
hasRole(String) | 사용자가 주어진 역할이 있다면 접근을 허용 |
hasAuthority(String) | 사용자가 주어진 권한이 있다면 |
hasAnyRole(String...) | 사용자가 주어진 권한이 있다면 접근을 허용 |
hasAnyAuthority(String...) | 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용 |
hasIpAddress(String) | 주어진 IP로부터 요청이 왔다면 접근을 허용 |
InMemoryUserDetailsManager
인메모리로 테스트 유저를 생성할 수 있는데 WebSecurityConfigurerAdapter를 상속받지 않은 상태에서는 아래처럼 이용이 가능하다.
@Bean
public InMemoryUserDetailsManager userDetailsService() {
List<UserDetails> users = new ArrayList<>();
users.add(User.builder().username("user").password("{noop}1111").roles("USER").build());
users.add(User.builder().username("sys").password("{noop}11111").roles("SYS").build());
users.add(User.builder().username("admin").password("{noop}11111").roles("ADMIN", "USER").build());
return new InMemoryUserDetailsManager(users);
}