无状态webapp中的Spring Security?

ber*_*tie 5 spring spring-security

可能重复:
create-session无状态使用

我刚刚开始在版本3.1上尝试Spring Security,我想知道如何使用无状态webapp实现身份验证.

想到了http-basic和digest,我已经尝试过了,但我不喜欢在不关闭浏览器的情况下无法注册表单身份验证.

我目前有一个工作状态无状态的webapp,使用spring安全性进行基于表单的身份验证(通过在会话中存储auth东西使其成为状态?),我想知道我可以研究什么策略来使Spring安全工作不使用http会话?

我意识到有一个<http create-session="stateless" ..>,但必须有一些东西需要做更多的事情因为应用程序在我尝试之后停止正常工作,通过在访问受保护资源时保持身份验证.

这是我的配置:

<http use-expressions="true" create-session="stateless">
    <form-login login-page="/login" 
        login-processing-url="/static/j_spring_security_check"
        authentication-failure-url="/login?login_error=t" />
    <logout logout-url="/static/j_spring_security_logout"/>

    <intercept-url pattern="/person/test/**" 
        access="isAuthenticated() and principal.username=='albertkam'"
    />
    <intercept-url pattern="/person/**" access="hasRole('ROLE_NORMAL')"/>

    <remember-me
        key="spitterKey"
        token-validity-seconds="2419200"/>
</http>
Run Code Online (Sandbox Code Playgroud)

create-session="stateless":

  1. 访问http:// myhost:8080/mycontext/person/blah
  2. 进入登录页面
  3. 登录后返回主页url http:// myhost:8080/mycontext(我希望它返回受保护资源)

没有 create-session="stateless",默认为ifRequired(有状态):

  1. 访问http:// myhost:8080/mycontext/person/blah
  2. 进入登录页面
  3. 登录后返回受保护的URL http:// myhost:8080/mycontext/person / blah(这是正确的行为,但有状态)

kda*_*bir 0

您可以使用always-use-default-target="false"on<form-login>来防止登录成功后进入默认页面。