我希望当遇到错误时,用户会收到对其http调用的异常响应。该错误确实被捕获并显示在spring日志中,但不会返回给用户。为什么?
我的方法是:
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) {
try {
// Check for authorization header existence.
String header = request.getHeader(JwtConstant.AUTHORIZATION_HEADER_STRING);
if (header == null || !header.startsWith(JwtConstant.TOKEN_BEARER_PREFIX)) {
chain.doFilter(request, response);
return;
}
// Validate request..
UsernamePasswordAuthenticationToken authorization = authorizeRequest(request);
SecurityContextHolder.getContext().setAuthentication(authorization);
chain.doFilter(request, response);
} catch (Exception e) {
SecurityContextHolder.clearContext();
throw new InternalServerErrorException("Erreur sur le filtre interne -> " + e.toString()); // Should return this to the user
}
}
日志中的错误:
.common.application.exception.InternalServerErrorException: Erreur sur le filtre interne ->
.common.application.exception.InternalServerErrorException: Erreur lors du authorizeRequest
错误处理程序:
@ControllerAdvice
public class ApiResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
String typeDateFormat = "yyyy-MM-dd HH:mm:ss";
...
@ExceptionHandler(InternalServerErrorException.class)
public final ResponseEntity<ExceptionResponse> handleInternalServerErrorException(InternalServerErrorException ex,
WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(
new SimpleDateFormat(typeDateFormat).format(new Date()), ex.getMessage(),
request.getDescription(false), "500");
return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
xception.java
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public class InternalServerErrorException extends RuntimeException {
private static final long serialVersionUID = 1L;
public InternalServerErrorException(String exception) {
super(exception);
}
}
例外回复。JAVA
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExceptionResponse {
private String date;
private String message;
private String uri;
private String status;
}
用户收到403。。我不知道为什么,但我应该接受我的错误,没有任何身体。。
InternalServerExc0019在try/catch之外工作。.
基本上,只有从@Controller
/@RestContoller
方法引发异常时,@ControllerAdvice
才会起作用。
从技术上讲,spring mvc
框架(即@ControllerAdvice
)只有在HTTP请求能够成功通过SecurityFilterChain
(由spring security配置)中的所有Filter
并由DispatcherServlet
处理时,才会对其生效。但是现在,在请求到达DispatcherServlet
之前,您的异常似乎是从安全过滤器链中的一个
过滤器中抛出的,因此将不会调用
@ControllerAdvice
来处理此异常。
您必须咨询Spring Security过滤器中是否有允许您自定义异常的相关配置。如果没有,您仍然可以在该过滤器中手动执行,因为您可以从那里访问
HttpServletResponse
。
问题内容: 我正在尝试创建一个简单的脚本,以便每次文件更新时都将文件中的数据发送到客户端。我已经测试过,发现该文件已被读取,但是客户端什么也没收到。控制台中没有错误。我对socket.io相当陌生。 node.js代码 客户代码 问题答案: 每当事情无法正常进行时,您都需要诉诸“调试模式”。在这种模式下,您需要收集所有可能发生的事件,并从中学到什么。为此,请将以下代码添加到客户端: 这些消息都记录
问题内容: 我只是通过nodejs.org上的软件包安装了node和npm,并且每当我尝试使用npm搜索或安装某些东西时,都会抛出以下错误,除非我对命令进行了sudo。我觉得这是权限问题?我已经是管理员。 问题答案: 这看起来像您的主目录中的权限问题。要回收 .npm 目录的所有权, 请 执行:
问题内容: 尝试使用pip-3.2安装suds,但由于错误而失败 此命名的客户端是哪个模块,如果需要的话该如何安装? 问题答案: 根据此页面,您应该尝试运行。看起来可能尚未更新为与3.2一起使用,而实际上已经更新了。希望这可以帮助! 编辑: 在PyPI页面上: 轻量级的SOAP客户端(Jurko的分支)。 基于Jeff Ortel(redhat dot com上的jortel)的原始“ suds”
null 然后如何用AngularJS将其呈现给客户机?
问题内容: 我正在使用WebApi为后端构建AngularJS SPA应用程序。我在服务器上使用属性进行模型验证,如果验证失败,这就是我从ModelState返回的内容。 然后如何使用AngularJS将其呈现给客户端? 问题答案: 呼叫服务器时,请根据对诺言的拒绝捕获错误。 然后在您的控制器中,我建议在处理显示的错误时将对错误数组的响应展平,如下面的小提琴示例所示: 放在一起:
我们试图对cadence设置进行基准测试(目前在2个EC2实例上运行:m5a.xlarge ),发现了许多cadence客户端错误: cadence_service:cadence_matching,操作:历史记录重新记录活动任务已启动