5

我有弹簧安全,并通过 login.jsp 登录工作得很好。

现在,我必须根据 URL 自动让用户登录(类似于单点登录)。我基本上在 URL 中有一个路径参数,它基本上是一个加密代码,我处理这个代码来进行自动登录。

我正在修改我的 LoginController 以检查我是否有一个有效的路径参数,我使用它来获取我的用户名和密码,使用我正在做的这个用户名和密码"forward:/j_spring_security_check?j_username="+username+"&j_password="+password

这将我引导到 login.jsp 并出现以下错误Your login attempt was not successful, try again. Caused : Authentication method not supported: GET

我也尝试过"redirect:/j_spring_security_check?j_username="+username+"&j_password="+password但没有帮助。

调用/j_spring_security_check是一个POST但是forward:&redirect:正在做一个GET,那么我如何从我的 LoginController调度到/j_spring_security_checkas ?POST

谢谢

4

2 回答 2

10

/j_spring_security_checkURL 被映射到UsernamePasswordAuthenticationFilter为请求提供服务。

UsernamePasswordAuthenticationFilter中,默认情况下,postOnly设置为true

以下更改在spring-security.xml哪些设置postOnlyfalse起作用。

<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>
于 2013-03-22T10:21:38.623 回答
3

您可以使用返回“POST”而不是“GET”的请求包装器绕过检查getMethod

但是,检查是有原因的。将凭据作为 URL 参数发送通常被认为是不好的做法。即使您使用的是加密参数,它在技术上仍然等同于发送未加密的身份验证凭据,因为任何窃取它的人都可以使用它进行身份验证。

于 2013-03-21T14:30:18.897 回答