42 lines
1.8 KiB
Java
42 lines
1.8 KiB
Java
package net.tokishu.note.exception;
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
import net.tokishu.note.dto.response.ApiErrorResponse;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.security.access.AccessDeniedException;
|
|
import org.springframework.security.web.AuthenticationEntryPoint;
|
|
import org.springframework.security.web.access.AccessDeniedHandler;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.io.IOException;
|
|
|
|
@Component
|
|
public class SecurityExceptionHandler implements AuthenticationEntryPoint, AccessDeniedHandler {
|
|
|
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
private void writeErrorResponse(HttpServletResponse response, int status, String message) throws IOException {
|
|
response.setStatus(status);
|
|
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
|
ApiErrorResponse body = ApiErrorResponse.builder()
|
|
.status(status)
|
|
.message(message)
|
|
.build();
|
|
response.getWriter().write(objectMapper.writeValueAsString(body));
|
|
}
|
|
|
|
@Override
|
|
public void commence(HttpServletRequest request, HttpServletResponse response,
|
|
org.springframework.security.core.AuthenticationException authException) throws IOException {
|
|
writeErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage());
|
|
}
|
|
|
|
@Override
|
|
public void handle(HttpServletRequest request, HttpServletResponse response,
|
|
AccessDeniedException accessDeniedException) throws IOException {
|
|
writeErrorResponse(response, HttpServletResponse.SC_FORBIDDEN, accessDeniedException.getMessage());
|
|
}
|
|
}
|