セットアップ: Tomcat での Resteasy + Spring Security。クライアント/サーバー間で交換されるデータは JSON 形式です。アプリが例外をスローしたときに、例外マッパーが JSON 形式のメッセージを返すようにします。
目標: 何か問題が発生した場合は常に、適切な形式の JSON エラー メッセージをサーバーから返します。
何が起こっているか: Spring Security レイヤーは、メソッド foo() がサーブレット コンテナーによって呼び出される前に呼び出されます。このレイヤーが失敗した場合 (ユーザー ID が間違っているなど)、サーブレットが呼び出される前であっても例外がスローされるため、エラーは適切にフォーマットされません。この場合、これを回避して 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>