접근 불가 페이지

김나영·2023년 6월 29일
0

Spring

목록 보기
23/38
  • 일반 사용자는 관리자 페이지에 접속이 인가되지 않아야함!!

권한(Authority) 설정 방법

  • 회원 상세 정보(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;
    }
}
  • 위의 코드는 ROLE_ADMIN으로 고정 되어 있지만 아래와 같은 실제 코드에서는 사용자에 저장되어 있는 role의 authority 값을 사용하여 동적으로 저장됨
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
  • UserDetailslmpl 저장된 authorities 값을 사용하여 간편하게 권한 제어 가능

API 별 권한 제어 방법

  • Controller에 " @Secured " Annotation으로 권한 설정 가능

    • @Secured(권한 이름) 선언

      • 권한 1개 이상 설정 가능
@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의 값을 넣어줘야함

  • 즉, 해당 값이 있는 사용자만 들어올 수 있음

    • @Secured Annotation 활성화 방법
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
@EnableGlobalMethodSecurity(securedEnabled = true) // @Secured 애너테이션 활성화
public class WebSecurityConfig {
  • @EnableGlobalMethodSecurity(securedEnabled = true) 넣어줘야함!!!

0개의 댓글