[Spring] Spring Security(8) @Secured

hyewon jeong·2023년 1월 4일
2

Spring

목록 보기
16/65

🍃 8. @Secured

  • API 접근 권한 제어 이해
    👉 '일반 사용자'는 관리자 페이지에 접속이 인가되지 않아야 합니다!!

    1. 스프링 시큐리티에 "권한 (Authority)" 설정방법

    1. 회원 상세정보 (UserServiceImpl) 를 통해 "권한 (Authority)" 설정 가능
    2. 권한을 1개 이상 설정 가능
    3. "권한 이름" 규칙
      a. "ROLE_" 로 시작하게 만들겠습니다.
        예) "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;
    }
}

스프링 시큐리티를 이용한 API 별 권한 제어 방법

- Controller 에 "**@Secured"** 어노테이션으로 권한 설정 가능
    - **@Secured("권한 이름")** 선언
        - 권한 1개 이상 설정 가능
// (관리자용) 등록된 모든 상품 목록 조회
    @Secured("ROLE_ADMIN")
    @GetMapping("/api/admin/products")
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }
  • @Secured" 어노테이션 활성화 방법
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
**@EnableGlobalMethodSecurity(securedEnabled = true)** // @Secured 어노테이션 활성화
public class WebSecurityConfig {
profile
개발자꿈나무

0개의 댓글