implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5"

 

 

403 forbbiden 에러는 서버에서 사용자의 요청을 거부했다는 의미로 , 현재 사용자가 로그인은 되어있지만

해당 작업을 수행할 수 없는 경우.

 

@PreAuthorize("isAuthenticated()") 인 경우 로그인이 안되어 있다면 302 메시지와 함께 로그인 경로로 이동

 

 

403에러는 많다, 권한이 없는경우 , 특정 조건이 맞지 않는 경우

이때 여러 페이지를 보여주는 방식 대신에 accessDeniedHandler 인터페이스를 구현해서 상황에 맞게 처리할 수 있다.

 

1. form태그의 요청이 403인 경우 로그인 페이지로 이동할 때 ACCESS_DENIED 값을 파라미터로 같이 전달한다

2. ajax인 경우에는 JSON 데이터를 만들어서 전송한다

 

public class Custom403Handler implements AccessDeniedHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {

        response.setStatus(HttpStatus.FORBIDDEN.value());

        //JSON요청 확인
        String contentType = request.getHeader("Content-Type");
        boolean jsonRequest = contentType.startsWith("application/json");
        if(!jsonRequest){
            response.sendRedirect("/member/login?error=ACCESS_DENIED");
        }
    }
}

 

스프링 시큐리티 설정에 빈처리와 예외 처리를 지정해 주어야합니다.

 

http.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
@Bean
public AccessDeniedHandler accessDeniedHandler() {
    return new Custom403Handler();
}

 

+ Recent posts