Files
SpringBootNoteAPI/src/main/java/net/tokishu/note/exception/SecurityExceptionHandler.java
T
2025-05-27 02:23:52 +02:00

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());
}
}