Spring Security自定义消息“不支持身份验证方法:GET”

时间:2014-02-21 13:24:36

标签: java spring spring-mvc spring-security

如何覆盖spring安全消息“不支持身份验证方法:GET”?

在spring-security-code-3.1.0.RELEASE.jar-> org / springframework / security / messages.properties中,没有任何键可以覆盖此消息。

是否有其他方法可以覆盖此消息?

我只允许服务器使用post方法进行身份验证。但是当我使用get消息直接调用/ j_spring_security_check时,服务器返回上面的消息。

提前致谢。

2 个答案:

答案 0 :(得分:2)

更改attemptAuthentication类的邮件覆盖UsernamePasswordAuthenticationFilter方法,并在AuthenticationServiceException抛出的位置设置自定义邮件。

参考:Spring Source Code Link

- 或 -

要覆盖postOnly请求的spring security的默认行为,如果您不想要特定的消息,请使用以下方法: org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler将处理所有与身份验证相关的异常。当spring spring配置为postOnly时,会处理org.springframework.security.authentication.AuthenticationServiceException,因此只有在抛出此异常时才会重定向到页面。

要覆盖默认配置,请在applicationContext.xml

中添加以下代码

<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler"> <property name="defaultFailureUrl" value="LOGIN_ERROR_PAGE_URL" /> <property name="exceptionMappings"> <props> <prop key="org.springframework.security.authentication.AuthenticationServiceException">REDIRECT_PAGE_URL</prop> </props> </property> </bean>

答案 1 :(得分:1)

当应用程序收到/j_spring_security_check请求时,将调用已配置的AbstractAuthenticationProcessingFilter子类。

在我的应用程序中,它是UsernamePasswordAuthenticationFilter,默认情况下postOnly设置为true。

要将postOnly重写为false,您需要更新身份验证处理过滤器的bean定义,如下所示:

<bean id="authenticationFilter" 
      class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"
      p:postOnly="false" />

web.xml中还需要进行以下更改

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

希望这会对你有所帮助。

Shishir