gpt4 book ai didi

jakarta-ee - Jersey 和 Filter 异常处理

转载 作者:行者123 更新时间:2023-12-03 17:56:29 24 4
gpt4 key购买 nike

我有一个配置了 Spring Security 处理身份验证的 Jersey 应用程序。 jersey-spring 包提供在我的 web.xml 中注册为 servlet 的 SpringServlet 类。

身份验证和一切都按预期工作。我想知道的是如何通过 Jersey servlet 发送 AuthenticationExceptions(和其他过滤器异常),以便我可以使用我们的 ExceptionMapper 来处理它们。

最初 SpringServlet 被配置为过滤器,但在阅读了一些内容后,我开始理解 servlet 应该能够处理过滤器中抛出的异常(也许这是一个不正确的理解)。将其更改为 servlet 后,我​​没有注意到任何行为变化,如果我跟踪 Spring Security 代码,我可以看到 HttpServletResponse 的写入位置。

我的问题:Spring Security 过滤器是否可能抛出 Jersey servlet 进程异常?

最佳答案

你怎么做取决于你是从 Spring Security 调用 Jersey,还是从 Jersey 调用 Spring Security。

如果您从 Jersey 容器内部调用 Spring Security,那么除了为适当的异常定义异常映射器之外,您不需要做任何事情。

如果您仅在客户端通过 Spring Security 过滤器时调用 Jersey,则在客户端请求通过这些过滤器时抛出的任何异常都不会被 Jersey 捕获(因为请求尚未进入 Jersey 容器)。将异常“获取”到 Jersey 容器中的一种方法是:

  • catch AuthenticationException在自定义身份验证过滤器中并调用 AuthenticationFailureHandler.onAuthenticationFailure()方法(传入异常),并确保通过不调用 FilterChain.doFilter() 来中断过滤器链
  • 配置您的 AuthenticationFailureHandler调用您的设计的 Jersey 资源,该资源将检索(然后重新抛出)Spring 生成的任何异常 HttpServletRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION)

  • 可能还有其他方法可以将异常“获取”到 Jersey ,但这是过去对我有用的一种方法。

    关于jakarta-ee - Jersey 和 Filter 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820485/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com