7

我正在使用 Spring MVC (3.1.1.RELEASE) 和 Spring Security (3.1.0.RELEASE)。

spring 应用程序是一个 REST API 服务器,移交 Json。

我的 security-context.xml 包含这个 PRE_AUTH_FILTER 过滤器:

<custom-filter position="PRE_AUTH_FILTER"  ref="siteminderFilter"  />
...
<beans:bean id="siteminderFilter" class=
"com.test.server.util.RequestHeaderAuthenticationFilter" >
    <beans:property name="principalRequestHeader" value="login"/>
    <beans:property name="authenticationManager" ref="authenticationManager" />    
</beans:bean>

我的自定义 RequestHeaderAuthenticationFilter 扩展AbstractPreAuthenticatedProcessingFilter 并抛出PreAuthenticatedCredentialsNotFoundException

因此用户收到 500 Internal Server Error。但我希望用户改为接收 JSON 字符串。可能吗 ?如果是,我该怎么做?

我尝试以这种方式使用异常映射,但它似乎不起作用

<beans:bean id="siteminderFilter" class=
"com.pecunia.server.util.RequestHeaderAuthenticationFilter" >
    <beans:property name="principalRequestHeader" value="login"/>
    <beans:property name="authenticationManager" ref="authenticationManager" />    
   <beans:property name="exceptionMappings">
      <beans:props>
    <beans:prop key="org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException">/error.json</beans:prop>
    </beans:props>
   </beans:property>
</beans:bean>

部署时给我这个错误:

Bean property 'exceptionMappings' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter

我也试过

<form-login authentication-failure-handler-ref="authenticationFailureHandler" />
...
<beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
   <beans:property name="exceptionMappings">
      <beans:props>
    <beans:prop key="org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException">/error.json</beans:prop>
    </beans:props>
   </beans:property>
</beans:bean>

但没有错误也没有结果(只是通常的 500 页)

4

0 回答 0