2016-03-03 2 views
0

Мы мигрируем наше приложение от SpringSecurity 3 до 4. Мы наш ConcurrentSessionControlStrategy боб настроены всегда создавать сеанс (Grails обозначение для определения бобы)Есть ли способ иметь ConcurrentSessionControlStrategy.alwaysCreateSession в Spring Security 4?

sessionRegistry(SessionRegistryImpl) 
sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) { 
    alwaysCreateSession = true 
} 

, потому что мы используем HTTP запросы с базовой аутентификацией из Excel и другие приложения для взаимодействия с приложением и без этой опции, сеанс не создается, и для каждого действия вместо однократной проверки необходимо выполнить аутентификацию для первого действия.

В Spring Security 4 ConcurrentSessionControlStrategy был перенесен в ConcurrentSessionControlStrategy (по миграции руководства - http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html), которые должны быть использованы внутри CompositeSessionAuthenticationStrategy, но мы не можем найти путь к стратегии установки сеанса.

Обойти мы в настоящее время является вызовом неосновной аутентификации страницы перед аутентификацией, то, что вызывает сеанс будет создан и последующие запросы будут выполняться на эту сессию

+1

'ConcurrentSessionControl' и то, что вы описываете, - это разные вещи. «ConcurrentSessionControl» предназначен для того, сколько сеансов для одного и того же пользователя может быть активным за один раз. Вы смешиваете создание сеанса и одновременный контроль ... Это совсем другие вещи. –

+0

Итак, ваша мысль заключается в том, что 'alwaysCreateSession' не влияет на создание сеанса на основе auth? После установки этого параметра внешние запросы создают сеанс, поэтому он дает нам то, что нам нужно. Кроме того, мы также контролируем, сколько разрешений для каждого пользователя разрешено, но это хорошо работает в 4, когда настроено в соответствии с руководством по миграции. – droggo

+1

Да, это влияет на создание сеанса, но оно не связано с 'ConcurrentSessionControlStrategy'. –

ответ

0

Комментарий от М. Deinum указал мне в другую сторону и Я обнаружил, что в spring-security-core плагин Grails securityContextPersistenceFilter определяется с помощью forceEagerSessionCreation = false. Переопределение этого боб, чтобы заставить создание нетерпеливый сеанса сделал трюк

securityContextPersistenceFilter(SecurityContextPersistenceFilter, ref('securityContextRepository')) { 
    forceEagerSessionCreation = true 
} 

Это, вероятно, также может быть сделано с помощью конфигурации Grails Spring Security Ядра

Исходный код доступен здесь: https://github.com/grails-plugins/grails-spring-security-core/blob/master/src/main/groovy/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.groovy

Смежные вопросы