java 如何在globall级别处理springboot 3安全异常[关闭]

piok6c0g  于 7个月前  发布在  Java
关注(0)|答案(1)|浏览(56)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
8小时前关闭
Improve this question
如何在全局级别处理Sping Boot 3安全端点状态代码异常。我尝试使用身份验证入口点的实现,并获得请求和响应,我验证响应。在这方面,我有一个问题,当涉及到不同的模块不工作时,某些模块的状态代码正常工作。我不知道如何处理Spring安全异常,特别是如果URL无效,显示404错误,处理URL相关异常
@Component
public class Uncategorized {

@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
        AuthenticationException authException) throws IOException, ServletException {
    int statusCode = response.getStatus();
    if (statusCode == HttpServletResponse.SC_CREATED) {
        response.sendError(HttpServletResponse.SC_CREATED, "Created"); //201
    } else if (statusCode == HttpServletResponse.SC_ACCEPTED) {
        response.sendError(HttpServletResponse.SC_ACCEPTED, "Accepted"); //202
    } else if (statusCode == HttpServletResponse.SC_NO_CONTENT) {
        response.sendError(HttpServletResponse.SC_NO_CONTENT, "No Content"); //204
    } else if (statusCode == HttpServletResponse.SC_NOT_FOUND) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND, "Invalid URL"); //404
    } else if (statusCode == HttpServletResponse.SC_BAD_REQUEST) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, "BadRequest");  //400
    } else if (statusCode == HttpServletResponse.SC_METHOD_NOT_ALLOWED) {
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "invalid request method"); //405
    } else if (statusCode == HttpServletResponse.SC_NOT_IMPLEMENTED) {
        response.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, "Not Implemented");  //501
    } else if (statusCode == HttpServletResponse.SC_SERVICE_UNAVAILABLE) {
        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Service Unavailable");  //503
    } else if (statusCode == HttpServletResponse.SC_UNAUTHORIZED) {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "invalidcredential");  //401
    } else if (statusCode == HttpServletResponse.SC_MOVED_TEMPORARILY) {
         response.sendError(HttpServletResponse.SC_MOVED_TEMPORARILY, "Moved temporarily");  //302
    } else if (statusCode == HttpServletResponse.SC_MOVED_PERMANENTLY) {
          response.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY, "Permenent redirect");  //301
    } else if (statusCode == HttpServletResponse.SC_NOT_MODIFIED) {
          response.sendError(HttpServletResponse.SC_NOT_MODIFIED, "Not Modified");  //304
    }else{
                
        response.sendError(HttpServletResponse.SC_FORBIDDEN, "invalid Token");  //403
    }

}

字符串

crcmnpdw

crcmnpdw1#

如果使用spring 3.2,您可以使用带@ControllerAdvice注解的类和带@ ExceptionNotice(value = SomeTypeOfException.class)注解的许多方法来集中转换“exception -> responseEntity”
这些示例是我的典型解决方案

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = ControllerLogicException.class)
    public ApiResultResponse<Object> controllerLogic(ControllerLogicException result) {
        log.error("{}-{}-{}", result.getErrorCode(), result.getErrorMessage(), result.getErrorDomain());
        return result.toApiResultResponse();
    }

    @ExceptionHandler(value = AuthenticationException.class)
    public ResponseEntity<ApiResultResponse<Object>> authenticationException(Throwable exc) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(
                ApiResultResponse.of(-1, exc.getLocalizedMessage(), exc.getClass().getName())
        );
    }

    @ExceptionHandler(value = Throwable.class)
    public ResponseEntity<ApiResultResponse<Void>> otherException(Throwable exc) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(
                ApiResultResponse.of(-1, exc.getLocalizedMessage(), exc.getClass().getName())
        );
    }

}

字符串

相关问题