[SPRING] 접근불가 페이지 만들기

야부엉·2023년 11월 14일
0

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 // 스프링 Security 지원을 가능하게 함
@EnableGlobalMethodSecurity(securedEnabled = true) // @Secured 애너테이션 활성화
public class WebSecurityConfig {

3. 실제 적용

  • WebSecurityConfig 클래스의 securityFilterChain 부분에 아래의 코드를 추가한다.
  • 페이지 Url은 원하는것을 만들어서 resources > static 폴더에 넣어서 사용하면 된다.
// 접근 불가 페이지
        http.exceptionHandling((exceptionHandling) ->
                exceptionHandling
                        // "접근 불가" 페이지 URL 설정
                        .accessDeniedPage("/forbidden.html")
        );

        return http.build();

출처

내일배움캠프 Spring Master

profile
밤낮없는개발자

0개의 댓글