Nic*_*cek 5 servlets jax-rs jersey java-ee servlet-filters
我有一个配置了Spring Security处理身份验证的Jersey应用程序.jersey-spring包提供了SpringServlet类,它在我的web.xml中作为servlet注册.
身份验证和所有工作按预期.我想知道的是如何通过Jersey servlet发送AuthenticationExceptions(以及其他过滤器异常),因此我可以使用我们的ExceptionMapper来处理它们.
最初SpringServlet被配置为过滤器,但在做了一些阅读之后,我开始明白servlet应该能够处理过滤器中抛出的异常(可能这是一个错误的理解).在将其更改为servlet后,我没有注意到行为的任何变化,如果我追踪Spring Security代码,我可以看到HttpServletResponse的编写位置.
我的问题:是否有可能让Jersey servlet进程抛出Spring Security过滤器引发的异常?
如何执行取决于您是从 Spring Security 调用 Jersey,还是从 Jersey 调用 Spring Security。
如果您从 Jersey 容器内部调用 Spring Security,那么除了为适当的异常定义异常映射器之外,您不需要执行任何其他操作。
如果您仅在客户端通过 Spring Security 过滤器后调用 Jersey,则客户端请求通过这些过滤器时抛出的任何异常都不会被 Jersey 捕获(因为请求尚未进入 Jersey 容器)。将异常“获取”到 Jersey 容器的一种方法是:
AuthenticationException并调用该AuthenticationFailureHandler.onAuthenticationFailure()方法(传入异常),并确保通过不调用来破坏过滤器链FilterChain.doFilter()AuthenticationFailureHandler设计来调用您设计的 Jersey 资源,该资源将检索(然后重新抛出)Spring 生成的任何异常HttpServletRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION)可能还有其他方法可以“获得”泽西岛的例外,但这是过去对我有用的一种方法。
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |