Spring Security 접근 불가 페이지 만들기

2024. 8. 17. 13:42·Spring
728x90
반응형

 

 

Spring Security에 "권한(Authority)" 설정 방법

 

 

회원 상세정보(UserDetailsImpl) 를 통해 권한 설정 가능. 권한을 1개 이상 설정 가능.

"권한 이름" 규칙 : "ROLE_"로 시작해야 함.

예) "ADMIN" 권한 부여 → "ROLE_ADMIN" "USER" 권한 부여 → "ROLE_USER"

 

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;
    }
}

 

예시 코드는 ROLE_ADMIN 으로 고정되어 있지만 아래와 같이 실제 코드에서는 사용자에 저장되어 있는 role의 authority 값을 사용하여 동적으로 저장된다.

 

UserRoleEnum role = user.getRole();
String authority = role.getAuthority();

SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);

 

UserDetailsImpl에 저장된 authorities 값을 사용하여 간편하게 권한을 제어 할 수 있다.

 

Spring Security를 이용한 API 별 권한 제어 방법

 

Controller에 @Secured 에너테이션으로 권한 설정 가능.

@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 에너테이션 활성화 방법

@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
@EnableMethodSecurity(securedEnabled = true) // @Secured 애너테이션 활성화
public class WebSecurityConfig {

 

접근 불가 페이지 URL 설정

WebSecurityConfig

// 접근 불가 페이지
http.exceptionHandling((exceptionHandling) ->
        exceptionHandling
                // "접근 불가" 페이지 URL 설정
                .accessDeniedPage("/forbidden.html")
);

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

Spring의 RestTemplate 이해하기  (0) 2024.08.17
Spring 데이터 검증 (Validation)하기  (0) 2024.08.17
Spring Security 프레임워크 이해하기  (0) 2024.08.16
Spring의 Filter 이해하기 및 구현하기  (0) 2024.08.16
Spring에서 JWT 이해하기 + 쿠키와 세션 개념까지  (0) 2024.08.16
'Spring' 카테고리의 다른 글
  • Spring의 RestTemplate 이해하기
  • Spring 데이터 검증 (Validation)하기
  • Spring Security 프레임워크 이해하기
  • Spring의 Filter 이해하기 및 구현하기
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    형변환
    MSA
    프로그래머스
    알고리즘
    온코더
    CI/CD
    C
    while문
    깃
    devops
    java
    C언어
    코테
    도커
    springboot
    내일배움캠프
    자료구조
    연결리스트
    Til
    정올
    아파치카프카
    스파르타코딩
    스파르타코딩클럽
    docker
    스프링
    스프링부트
    progate
    깃헙
    이진트리
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
Spring Security 접근 불가 페이지 만들기
상단으로

티스토리툴바