
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.common.util;
import com.takensoft.common.config.CommonConfig;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
/**
* @author : takensoft
* @since : 2024.04.05
*
* 인가(권한) 에러
* AccessDeniedHandler를 커스텀하여 접근 거부된 요청에 대한 처리
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class CustomAccessDenieHandler implements AccessDeniedHandler {
private final CommonConfig commonConfig;
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
// 접근 거부 예외에 대한 로그 출력
log.error("Access Denied Exception: {}", accessDeniedException.getMessage());
// 접근 거부 에러 응답을 위한 객체 생성
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("Access Denied"); // 에러 응답 메시지 설정
errorResponse.setPath(request.getRequestURI()); // 요청 경로 설정
errorResponse.setError(HttpStatus.FORBIDDEN.getReasonPhrase()); // 에러 메시지 설정
errorResponse.setStatus(HttpStatus.FORBIDDEN.value()); // 에러 상태 코드 설정
errorResponse.setTimestamp(LocalDateTime.now()); // 응답 시간 설정
// 응답 헤더 설정 및 json 응답 전송
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setStatus(HttpStatus.FORBIDDEN.value());
response.getOutputStream().write(commonConfig.getObjectMapper().writeValueAsBytes(errorResponse));
}
}