Spring Security:如何排除某些资源?

时间:2010-08-03 08:06:14

标签: spring-security

我有以下定义......

    <bean id="fsi" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
    <property name="objectDefinitionSource">
      <sec:filter-invocation-definition-source >
            <sec:intercept-url pattern="/secure/css/**"        access="ROLE_TIER0"/>
            <sec:intercept-url pattern="/secure/images/**"     access="ROLE_TIER0"/>
            <sec:intercept-url pattern="/**"                   access="ROLE_TIER0"/>
      </sec:filter-invocation-definition-source>
    </property>
    </bean>

我想拥有这个网址的资源......

“/不安全/ **”

对所有通话开放,即周围无安全保障。

我试过添加......

<sec:intercept-url pattern="/nonsecure/**" access="permitAll" />

但是这会导致Websphere抛出关于

的错误
Unsupported configuration attributes: [permitAll] 

有人可以告诉我如何从安全性中排除此网址吗?

6 个答案:

答案 0 :(得分:84)

在spring security 3.1.x中,不推荐使用filters =“none”。相反,您使用多个<http>标记,如下所示:

<http pattern="/nonsecure/**" security="none"/>

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-form-and-basic

答案 1 :(得分:24)

我认为您必须在安全xml的use-expressions配置中添加http标记,例如:

<http auto-config="true" use-expressions="true">
...
...
</http>

编辑: 好吧,我不确定您使用的是什么版本的弹簧安全性。我知道这适用于3.0,但对于旧版本我不确定。

答案 2 :(得分:19)

<security:http auto-config='true'>
    <security:intercept-url pattern="/getfeed/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" />
    <security:http-basic />
</security:http>

access =“ IS_AUTHENTICATED_ANONYMOUSLY ”是解决方案。 我在以下链接http://syntx.io/adding-http-basic-auth-to-restful-services-in-java-and-spring/

中找到了它

自上而下评估拦截。如果你在/ getIntelFeed / **之前写这个/ **,那么所有服务都将通过/ **并且安全性将应用于所有服务。在这种情况下/ getIntelFeed / **将无效。

答案 3 :(得分:17)

尝试:

<sec:intercept-url pattern="/nonsecure/**" filters="none" />

答案 4 :(得分:3)

为了能够使用[permitAll]等表达式,你必须添加一个WebExpressionVoter to your AccessDecisionManager

答案 5 :(得分:0)

您没有指定配置的其余部分,并且因为看起来您有明确的bean配置,所以我们很难准确猜出您是如何配置的。我会说上面答案的某些组合是正确的。

  1. 如果您使用的是Spr Sec 3,如果您想启用SpEL表达式(并且还有相应的bean也可以评估它们的配置),Gopi的答案是正确的。如果您不使用http命名空间,这可能很难。
  2. 如果您为未经身份验证的(匿名)用户配置了适当的过滤器以设置SecurityContext,则设置role =“IS_AUTHENTICATED_ANONYMOUSLY,IS_AUTHENTICATED_FULLY,IS_AUTHENTICATED_REMEMBERED”或其某些组合应该有效。
  3. 如果所有其他方法都失败了,正如几位人士所建议的那样,过滤器=“无”会做你想要的,但要注意你真的不需要任何关于Spring Security的事情。您正在渲染的页面底层的代码,否则您可能会发现自己在以后摸不着头脑。
  4. 祝你好运!