【问题标题】:JAX-RS ExceptionMapper catches all except 401JAX-RS ExceptionMapper 捕获除 401 之外的所有内容
【发布时间】:2016-09-09 05:28:05
【问题描述】:

我编写了一个简单的自定义 ExceptionMapper,以便在出现未捕获的异常时提供良好的响应:

@Provider
public class CustomExceptionMapper implements ExceptionMapper<Throwable> {

    @Override
    public Response toResponse(Throwable t) {
        if (t instanceof WebApplicationException) {
            WebApplicationException webEx = (WebApplicationException)t;
            return webEx.getResponse();
        } else {
            return ResponseHelper.INTERNAL_SERVER_ERROR;
        }
    }

}

这是完美的工作,所有异常(404、415,...)都在这里捕获,除了 401。我的 REST 客户端也没有响应代码,只有纯文本响应:Authentication Failed。

我的意图是返回正确的响应并删除以某种方式发送的WWW-Authenticate。有人出主意吗?

【问题讨论】:

  • 显示抛出带有401状态码的异常的代码。
  • @CássioMazzochiMolin 没有代码。这是安全机制的标准行为。我刚刚在我的 web.xml 中定义了受限路径

标签: jax-rs wildfly


【解决方案1】:

见JavaDoc:

实现ExceptionMapper 合同的提供者必须以编程方式在 JAX-RS 运行时中注册,或者必须使用 @Provider 注释进行注释,以便 JAX-RS 运行时在提供者扫描阶段自动发现。

它是 JAX-RS 运行时的一部分,只能捕获 JAX-RS 运行时中抛出的异常。

但是你的 HTTP 401 被扔进了你的容器。在这种情况下,您可以将error-page 添加到您的web.xml,请参阅https://stackoverflow.com/a/26429261/5277820。

【讨论】:

  • 非常感谢。现在我能够捕捉到异常,但我无法修改来自 servlet 的响应标头。我什至不能改变身体。另一件事:当我在 web.xml 中将一个简单的 html 文件设置为错误页面时,它适用于 404 代码,但不适用于 401。知道为什么吗?
  • 我使用的是使用 resteasy 的 wildfly。我试图修改响应标头但没有任何成功。我认为响应已经提交。
  • 你试过JBoss Developer的答案了吗?
  • 遗憾的是,这只是一个客户端解决方案,没有服务器解决方案。你能想到别的吗?我真的迷路了。
  • 遗憾的是,这并不是一个真正的选择。所以你认为没有标准的方法吗?我想我必须再次在jboss论坛上发布它
猜你喜欢
  • 2019-04-03
  • 2014-01-24
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2017-06-11
  • 2011-08-12
相关资源
最近更新 更多