Java 格式化筛选器链中Spring security引发的异常消息
设置: Tomcat上的Resteasy+Spring安全性。 客户机/服务器之间交换的数据采用JSON格式。 让异常映射程序在应用程序引发任何异常时返回JSON格式的消息 目标: 每当出现问题时,总是从服务器返回格式正确的JSON错误消息 正在发生的事情: Spring安全层在servlet容器调用方法foo()之前被调用。如果该层失败(例如,错误的用户id),则即使在调用servlet之前也会引发异常,因此错误的格式不正确。 你知道在这种情况下如何绕过这个问题并返回JSON错误吗 谢谢 my web.xml的一部分(如果有帮助):Java 格式化筛选器链中Spring security引发的异常消息,java,servlets,exception-handling,tomcat6,resteasy,Java,Servlets,Exception Handling,Tomcat6,Resteasy,设置: Tomcat上的Resteasy+Spring安全性。 客户机/服务器之间交换的数据采用JSON格式。 让异常映射程序在应用程序引发任何异常时返回JSON格式的消息 目标: 每当出现问题时,总是从服务器返回格式正确的JSON错误消息 正在发生的事情: Spring安全层在servlet容器调用方法foo()之前被调用。如果该层失败(例如,错误的用户id),则即使在调用servlet之前也会引发异常,因此错误的格式不正确。 你知道在这种情况下如何绕过这个问题并返回JSON错误吗 谢谢 my
<filter>
<filter-name>securityPropagationFilter</filter-name>
<filter-class>com.foo.bar.context.servlet.SecurityContextPropagationFilter</filter-class>
</filter>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>loggingFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>securityPropagationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>loggingFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>
Resteasy
</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
securityPropagationFilter
com.foo.bar.context.servlet.SecurityContextPropagationFilter
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
日志过滤链
org.springframework.web.filter.DelegatingFilterProxy
securityPropagationFilter
/*
springSecurityFilterChain
/*
日志过滤链
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
放松
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
我需要更深入地挖掘,但您可能可以使用RESTeasy或Spring中的异常映射器来解决这个问题 我通过在web.xml中添加以下内容来解决这个问题
<error-page>
<error-code>403</error-code>
<location>403.json</location>
</error-page>
403
403.json
另一方面,对于我需要处理的每个错误代码,我都需要一个条目。但是如果我也必须在Spring中调整异常处理程序,我想我也必须这样做。可能在Spring security中处理这个问题-我还没有尝试过。但是异常映射器在这种情况下不起作用。只有当被调用的api抛出异常时,才会调用异常映射程序。但在我的例子中,异常将在安全过滤器链中生成(在调用实际服务之前执行-因此它不会到达异常被“映射”的点)