Java/Spring
[Spring Security] AccessDeniedHandler 설정
Z_Z
2022. 12. 2. 15:09
반응형
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 창이 뜬다.
반응형