首页 文章

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

提问于
浏览
3

我有一个使用spring mvc和spring security 3.2开发的web应用程序 . 我希望我的应用程序使用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 回答

  • 2

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

    • never - Spring Security永远不会创建会话,但如果应用程序会使用,则会使用一个会话 .

    • stateless - Spring Security不会创建会话并忽略会话以获取Spring身份验证 .

    由于您选择 stateless ,在忽略表单登录后,auth对象在会话中保持不变 . 如果 never 按预期工作,请尝试 .

相关问题