Files
baiyue-firstleg/common-security/src/main/java/com/baiyue/common/security/JsonAccessDeniedHandler.java
T

35 lines
1.5 KiB
Java
Raw Normal View History

2026-07-30 18:01:36 +08:00
package com.baiyue.common.security;
import com.baiyue.common.core.api.ApiResponse;
import com.baiyue.common.core.api.ResultCode;
import com.baiyue.common.web.CorrelationContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.MediaType;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
* 访问拒绝处理器,以统一 JSON 结构返回 HTTP 403 错误。
*/
public class JsonAccessDeniedHandler implements AccessDeniedHandler {
private final ObjectMapper objectMapper;
public JsonAccessDeniedHandler(ObjectMapper objectMapper) { this.objectMapper = objectMapper; }
@Override
public void handle(HttpServletRequest request, HttpServletResponse response,
AccessDeniedException exception) throws IOException {
ResultCode code = ResultCode.FORBIDDEN;
response.setStatus(code.httpStatus().value());
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
objectMapper.writeValue(response.getWriter(), ApiResponse.failure(code, code.message(),
CorrelationContext.requestId(request), CorrelationContext.traceId(request)));
}
}