以编程方式禁用Spring安全性

以编程方式禁用Spring安全性,spring,filter,spring-security,Spring,Filter,Spring Security,我有一个具有spring安全性的web应用程序,默认情况下,所有页面都需要授权。在我的场景中,管理员可以在某个时候决定禁用某些页面的安全性,或者完全禁用它。如何才能最好地实现这一点?我正在考虑修改FilterChainProxy,但我不清楚(getFilterChains()返回一个不可修改的列表)的确切方式是什么?Spring安全性是如何配置的?您可以选择添加自定义permissionEvaluator来验证您的条件 查看子类DelgatingFilterProxy,检查是否调用代理的标志 c

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

Spring安全性是如何配置的?您可以选择添加自定义permissionEvaluator来验证您的条件


查看子类
DelgatingFilterProxy
,检查是否调用代理的标志

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)
    }
  }
}
然后在web.xml中使用它来代替用于
springSecurityFilterChain
DelegatingFilterProxy
(假设您使用的是命名空间配置)。例如:

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

您可以使用相同的技术使用一个全包通配符,如
,然后跳过对/(对于静态文件等)下的某些路径集调用Spring安全筛选器。

我有一些特定的投票者和身份验证提供者,但它使用默认的web应用程序配置
,您的配置似乎不寻常,因为所有内容都受到保护,包括登录页面(通常不受保护)。你能解释一下管理员可以禁用页面安全性的场景吗?它使用http basic,因此使用默认的浏览器身份验证对话框。该应用程序是一种db search/explore/server,由于默认情况下所有内容都受到保护,管理员可能需要/决定公开该应用程序(例如,由于第三方应用程序需要与该应用程序通信,但不支持身份验证)。非常感谢,这正是我所寻找的,效果非常好!