以编程方式禁用Spring Security

时间:2012-03-21 13:39:00

标签: spring filter spring-security

我有一个具有弹簧安全性的Web应用程序,默认情况下所有页面都需要授权。在我的场景中,管理员可以在某个时候决定禁用某些页面的安全性或完全禁用它。怎么能最好地实现?我正在考虑修改FilterChainProxy,但我不清楚(getFilterChains()如何返回不可修改的列表)?

2 个答案:

答案 0 :(得分:3)

子类DelgatingFilterProxy并检查是否调用该委托的标志。

然后在web.xml中使用它代替DelegatingFilterProxy使用的springSecurityFilterChain(假设您正在使用命名空间配置)。例如:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>com.foo.spring.MyDelegatingFilterProxy</filter-class>
</filter>

在DelegatingFilterProxy中检查一个标志(例如,系统属性)以查看是否应该委派。

class MyDelegatingFilterProxy extends DelegatingFilterProxy {

  override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {

    if (System.getProperty("skipSpringSecurity" != null) {
      // Ignore the DelegatingProxyFilter delegate
      chain.doFilter(request, response)
    } else {
      // Call the delegate
      super.doFilter(request, response, chain)
    }
  }
}

您可以使用相同的技术来使用像<security:intercept-url pattern="/**" access="ROLE_USER" />这样的毯子通配符,然后跳过针对/(对于静态文件等)的一些路径调用Spring Security过滤器。

答案 1 :(得分:0)

如何配置Spring安全性?您可以选择添加一个自定义权限评估器来验证您的条件吗?

查看spring-security writing a custom PermissionEvaluator - how to inject a DAO service?