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

jef*_*ter 39 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>
Run Code Online (Sandbox Code Playgroud)

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

"/不安全/**"

打开所有呼叫,即没有安全性.

我试过添加......

<sec:intercept-url pattern="/nonsecure/**" access="permitAll" />
Run Code Online (Sandbox Code Playgroud)

但这会导致Websphere抛出错误

Unsupported configuration attributes: [permitAll] 
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何从安全性中排除这个URL?

eny*_*nyo 84

在spring security 3.1.x中,不推荐使用filters ="none".相反,你使用这样的多个<http>标签:

<http pattern="/nonsecure/**" security="none"/>
Run Code Online (Sandbox Code Playgroud)

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


Gop*_*opi 24

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

<http auto-config="true" use-expressions="true">
...
...
</http>
Run Code Online (Sandbox Code Playgroud)

编辑:嗯,我不知道你正在使用什么版本的弹簧安全.我知道这适用于3.0,但对于旧版本,我不确定.

  • 小心使用属性`auto-config` - 我刚刚学到了很难的方法.从Spring [文档](http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#appendix-namespace):"不建议使用此属性. " (2认同)

Muh*_*taf 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>
Run Code Online (Sandbox Code Playgroud)

access =" IS_AUTHENTICATED_ANONYMOUSLY "是解决方案.我在以下链接中找到了它:http://syntx.io/adding-http-basic-auth-to-restful-services-in-java-and-spring/

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


Gan*_*alf 17

尝试:

<sec:intercept-url pattern="/nonsecure/**" filters="none" />
Run Code Online (Sandbox Code Playgroud)

  • 在Spring 3.1中不再支持filters ="none" (30认同)
  • 我一般同意这个答案; 但是,一个人们经常错过的过滤器="无"的一个常见问题是,如果链中没有Spring Security过滤器,则没有SecurityContext,因此没有明显的安全检查(例如服务层注释或引用Spring Security对象的JSP自定义标签) )可能意外失败.如果您在动态内容的网页上使用filters ="none",请务必小心! (2认同)
  • ``org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:不再支持使用"filters ='none'".请为要排除的模式定义单独的<http>元素,并使用属性"security ='none'"``` (2认同)