Отключить Spring Security программно - PullRequest
2 голосов
/ 21 марта 2012

У меня есть веб-приложение с пружинной защитой, и по умолчанию все страницы требуют авторизации. В моем сценарии администратор может в какой-то момент решить отключить безопасность для некоторых страниц или отключить ее полностью. Как это может быть лучше всего достигнуто? Я думал об изменении FilterChainProxy, но мне не ясно, как именно (getFilterChains() возвращает неизменяемый список)?

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Подкласс 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 для некоторого набора путей в / (для статических файлов и т. Д.).

0 голосов
/ 21 марта 2012

Как настроена безопасность Spring? Вы можете добавить пользовательский allowEvaluator, который подтверждает ваши условия?

Взгляните на Spring-Security, пишущий пользовательский PermissionEvaluator - как внедрить службу DAO?

...