1. API 접근 권한 제어
1. Spring Security에 "권한(Authority)" 설정 방법

- 회원 상세정보(UserDetailsImpl)를 통해 권환 설정이 가능하다
- 권한을 1개 이상 설정 가능
- "권한 이름" 규칙
1. "ROLE_" 로 시작해야 함
- "ADMIN" 권한 부여 → "ROLE_ADMIN"
- "USER" 권한 부여 → "ROLE_USER"
- 사용 예시
public class UserDetailsImpl implements UserDetails {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(adminAuthority);
return authorities;
}
}
2. Spring Security를 이용한 API 별 권한 제어 방법
- Controller에 "@Secured" 애너테이션으로 권한 설정이 가능
- @Secured("권한 이름") 선언
- 예시
@Secured(UserRoleEnum.Authority.ADMIN)
@GetMapping("/products/secured")
public String getProductsByAdmin(@AuthenticationPrincipal UserDetailsImpl userDetails) {
}
- "@Secured" 에너테이션을 사용하기 위해서는 @EnableGlobalMethodSecurity(securedEnabled = true)를 설정해 줘야한다
- 예시
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig {
3. 실제 적용
- WebSecurityConfig 클래스의 securityFilterChain 부분에 아래의 코드를 추가한다.
- 페이지 Url은 원하는것을 만들어서 resources > static 폴더에 넣어서 사용하면 된다.
http.exceptionHandling((exceptionHandling) ->
exceptionHandling
.accessDeniedPage("/forbidden.html")
);
return http.build();
출처
내일배움캠프 Spring Master