3

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

<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 服务。

反正有没有得到我所期望的?

4

1 回答 1

3

答案可能在属性的描述中create-session

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

由于您选择stateless了在表单登录被忽略后保留在会话中的身份验证对象。尝试是否never按预期工作。

于 2013-06-04T10:14:04.603 回答