회원 상세 정보(UserDetailslmpl)를 통해 권한(Authority) 설정 가능
권한 1개 이상 설정 가능
권한 이름 규칙
"ROLE_"로 시작해야함
ex)
" ADMIN " 권한 부여 --> " ROLE_ADMIN "
" USER " 권한 부여 --> " ROLE_USER "
public class UserDetailsImpl implements UserDetails {
// ...
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
SimpleGrantedAuthority adminAuthority = new SimpleGrantedAuthority("ROLE_ADMIN");
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(adminAuthority);
return authorities;
}
}
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
Controller에 " @Secured " Annotation으로 권한 설정 가능
@Secured(권한 이름) 선언
@Secured(UserRoleEnum.Authority.ADMIN) // 관리자용
@GetMapping("/products/secured")
public String getProductsByAdmin(@AuthenticationPrincipal UserDetailsImpl userDetails) {
System.out.println("userDetails.getUsername() = " + userDetails.getUsername());
for (GrantedAuthority authority : userDetails.getAuthorities()) {
System.out.println("authority.getAuthority() = " + authority.getAuthority());
}
return "redirect:/";
}
제어하고 싶은 메서드 위에 @Secured를 넣어 주면 됨
그 안의 속성 값으로 Admin에게만 허가 할 거니까 Admin만 들어올 수 있게 Admin의 값을 넣어줘야함
즉, 해당 값이 있는 사용자만 들어올 수 있음
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
@EnableGlobalMethodSecurity(securedEnabled = true) // @Secured 애너테이션 활성화
public class WebSecurityConfig {