如何覆盖spring安全消息“不支持身份验证方法:GET”?
在spring-security-code-3.1.0.RELEASE.jar-> org / springframework / security / messages.properties中,没有任何键可以覆盖此消息。
是否有其他方法可以覆盖此消息?
我只允许服务器使用post方法进行身份验证。但是当我使用get消息直接调用/ j_spring_security_check时,服务器返回上面的消息。
提前致谢。
答案 0 :(得分:2)
更改attemptAuthentication
类的邮件覆盖UsernamePasswordAuthenticationFilter
方法,并在AuthenticationServiceException
抛出的位置设置自定义邮件。
- 或 -
要覆盖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