暂存提交
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user