API 접근 권한 제어 이해
👉 '일반 사용자'는 관리자 페이지에 접속이 인가되지 않아야 합니다!!
예) "ADMIN" 권한 부여 → "ROLE_ADMIN"
"USER" 권한 부여 → "ROLE_USER"
package com.sparta.springsecurity.entity;
public enum UserRoleEnum {
USER(Authority.USER), // 사용자 권한
ADMIN(Authority.ADMIN); // 관리자 권한
private final String authority;
UserRoleEnum(String authority) {
this.authority = authority;
}
public String getAuthority() {
return this.authority;
}
public static class Authority {
public static final String USER = "ROLE_USER";
public static final String ADMIN = "ROLE_ADMIN";
}
}
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;
}
}
- Controller 에 "**@Secured"** 어노테이션으로 권한 설정 가능
- **@Secured("권한 이름")** 선언
- 권한 1개 이상 설정 가능
// (관리자용) 등록된 모든 상품 목록 조회
@Secured("ROLE_ADMIN")
@GetMapping("/api/admin/products")
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
**@EnableGlobalMethodSecurity(securedEnabled = true)** // @Secured 어노테이션 활성화
public class WebSecurityConfig {