除非我指定访问角色,否则Spring Security会忽略我的基本身份验证

时间:2013-02-11 10:46:59

标签: java spring spring-security resteasy

使用Spring 3.1.2和RestEasy 2.3.4。

我有一些REST资源。但是,我不想在Spring中指定所有角色需要哪些角色。这是我目前的设置:

<security:http auto-config="true" use-expressions="true">
    <security:http-basic/>
    <security:intercept-url pattern="/secrets/**" access="ROLE_USER"/>
    <security:intercept-url pattern="/**"/>
</security:http>

对'/ secret / **'的调用进行了身份验证,我可以从SecurityContextHolder对象访问用户和角色。但是,即使我通过基本凭据,也不会对“/ **”进行调用。我想根据提取的数据进行授权,而不是通过网址进行授权。

除非我指定访问

,否则Spring Security似乎忽略了我的基本身份验证

2 个答案:

答案 0 :(得分:0)

尝试 isFullyAuthenticated()表达式:

<security:intercept-url pattern="/**" access="isFullyAuthenticated()" />

答案 1 :(得分:0)

我最终得到了一个不完美的解决方案。我通过身份验证访问将秘密网址放在首位。然后我允许所有其他未经身份验证的访问GET方法。这解决了现在的问题。我仍然希望根据所访问的数据进行身份验证。

这里需要身份验证的中间的intercept-url行不会向服务传递身份验证信息,即使它应该存在。

<security:http use-expressions="true">
    <security:intercept-url pattern="/secrets/**" access="isAuthenticated()"/>
    <security:intercept-url pattern="/**" method="GET" access="isAnonymous()"/>
    <security:intercept-url pattern="/**" access="isAuthenticated()"/>
    <security:http-basic/>
</security:http>