새소식

반응형
Java/Spring Boot

[Spring Security] AccessDeniedHandler 설정

  • -
728x90
반응형

Spring Security 에서 권한에 따른 접근 불가한 url 에 대한 handler 설정이다.

본인은 권한 없는 사람의 접근에 따라 특정 화면으로 고정시킬 목적으로 handler 설정을 한다.

 

1. AccessDeniedHandler 발생 시 보여줄 View 화면 설정

본인은 아래와 같은 경로에 accessDenied.html 파일을 생성했다.

2. AccessDeniedHandler 설정

아래와 같이 security/handler/ 경로에 AuthenticationAccessDeniedHandler 클래스를 생성한다.

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;

public class AuthenticationAccessDeniedHandler implements AccessDeniedHandler {

    private String denied_url;

    public AuthenticationAccessDeniedHandler() {
        this.denied_url = "/auth/accessDenied";
    }

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, 
        AccessDeniedException accessDeniedException) throws IOException, ServletException {
        response.sendRedirect(request.getContextPath() + denied_url);
    }
}

 

AccessDeniedHandler

접근 불가능한 URL에 대해서 에러 처리를 위한 Handler 이다.

따로 설정을 안했을 경우 기본으로 구현한 클래스는 AccessDeniedHandlerImpl 이다.

403 FORBIDDEN 에러를 reponse 객체에 담아 반환한다.

 

본인은 생성자 함수에 denied_url 을 설정한 후 handle 메서드를 통해 해당 url 로 redirect 시킨다.

 

3. Controller 설정

AuthenticationAccessDeniedHandler 설정을 통해 /auth/accessDenied 로 redirect 시킨다.

아래는 accessDenied url 매핑 내용이다.

 

@Controller
@RequestMapping(value="/auth")
public class AuthController {
    @GetMapping(value="/accessDenied")
    public String accessDenied() {
        return "contents/common/accessDenied";
    }
}

 

위에서 설정한 accessDenied html 파일을 리턴하는 내용이다.

 

특정 권한이 없는 url 요청을 하면 아래와 같이 "접근 권한이 없습니다." 라는 alert 창이 뜬다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.