繁体   English   中英

Spring Security在过滤器链中引发的格式化异常消息

[英]Format exception message thrown by Spring security in filter chain

设置:Tomcat上的Resteasy + Spring Security。 客户端/服务器之间交换的数据为JSON格式。 让异常映射器在应用程序抛出任何异常时返回JSON格式的消息。

目标:每当出现问题时,始终从服务器返回格式正确的JSON错误消息。

发生了什么:在servlet容器调用方法foo()之前,将调用Spring Security层。 如果该层失败(例如,错误的用户ID),则即使在调用Servlet之前也会引发异常,因此错误的格式不正确。 任何想法如何解决这个问题并在这种情况下返回JSON错误?

谢谢。

我的web.xml的部分是否有帮助:

<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>

我通过将以下内容添加到我的web.xml中来解决此问题

<error-page>
    <error-code>403</error-code>
    <location>403.json</location>
</error-page>

另一方面,我需要处理的每个错误代码都需要一个条目。 但是,如果我也必须在Spring中调整异常处理程序,我想我也必须这样做。

我将不得不进行更深入的研究,但是您也许可以使用RESTeasy或Spring中的异常映射器解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM