Spring安全性,无论是http basic还是表单登录身份验证

时间:2013-06-04 10:03:20

标签: spring-security http-basic-authentication form-authentication

我有一个使用spring mvc和spring security 3.2开发的网络应用程序。我希望我的应用程序使用http基本身份验证进行休息服务,并为其他部分形成登录身份验证。以下是我的安全配置:

<http pattern="/services/**" create-session="stateless" use-expressions="true">
    <intercept-url pattern="/**" access="hasRole('ROLE_REMOTE,ROLE_USER')"/>
    <http-basic />
</http>

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/static/**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
    <form-login login-page="/login.do" always-use-default-target="true"     default-target-url="/main.do" />
    <logout invalidate-session="true" logout-success-url="/login.do"
        logout-url="/j_spring_security_logout" />
</http>

我的期望是:当用户从表单登录时,它可以调用restful服务而无需经过基本身份验证(因为它已经过身份验证)。我的想法是角色为“ROLE_USER”的用户也应该调用restful服务。但是,我得到的是从表单登录后,我还被提示进行基本身份验证,尝试从浏览器调用restful服务。

有没有得到我期望的结果?

1 个答案:

答案 0 :(得分:3)

答案可能在description of the create-session attribute

  • never - Spring Security永远不会创建会话,但如果应用程序会使用,则会使用一个会话。
  • stateless - Spring Security不会创建会话并忽略会话以获取Spring身份验证。

由于您选择了stateless,因此在忽略表单登录后会话中会保留auth对象。尝试never按预期工作。