2010-10-07 2 views
4

Я не могу найти, как получить ссылку на SessionRegistry Spring Security (V3) внутри действия struts.Как получить Spring Session SessionRegistry?

Я настроил слушателя внутри моего файла web.xml:

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

И я пытался использовать @Autowired аннотацию, чтобы привести его в действие:

@Autowired 
private SessionRegistry sessionRegistry; 

@Override 
public String execute() throws Exception { 
    numberOfUsersLoggedin= sessionRegistry.getAllPrincipals().size(); 
    return SUCCESS; 

} 


public SessionRegistry getSessionRegistry() { 
    return sessionRegistry; 
} 

public void setSessionRegistry(SessionRegistry sessionRegistry) { 
    this.sessionRegistry = sessionRegistry; 
} 

Конфигурация http выглядит так:

<session-management invalid-session-url="/public/login.do?login_error=expired" 
     session-authentication-error-url="/public/login.do" 
     session-fixation-protection="newSession"> 
     <concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/> 
    </session-management>  

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

Может ли кто-нибудь указать, что я делаю неправильно здесь, или показать мне путь к примеру?

Заранее благодарим за любые/все ответы!

ответ

1

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

+0

спасибо за ссылку. Я добавил компонент sessionRegistry в мою конфигурацию Spring, и он больше не равен нулю в действии Struts. Однако, когда я пытаюсь получить # зарегистрированных пользователей (при входе в систему) значение sessionRegistry.getAllPrincipals(). Size(); всегда 0. Я читаю документы прямо? Похоже, что если я использую пользовательскую форму входа (которой я являюсь - аутентификация против LDAP), я не могу использовать управление сеансом namespace/auto config, указанное выше. Кажется, мне приходится вручную настраивать все управление сеансом и контроль параллелизма вручную? – Griff

+0

Глядя на он-лайн документы, я не могу понять, что такое имя моего провайдера проверки подлинности для myAuthFilter. Я использую пространство имен , который не предоставляет идентификатор bean ... \t <поставщик аутентификации ref = 'ldapProvider' /> Griff

3

Если вы настраиваете Spring Security с помощью пространства имен, следующие атрибуты параллелизма-контроля тега может быть полезным для доступа к SystemRegistry:

  1. сеансового реестр псевдоним.
  2. session-registry-ref.

Описание каждого из атрибутов из официальной документации:

сеансового реестра псевдоним. Также полезно иметь ссылку на внутренний сеанс реестра для использования в ваших собственных бобах или в интерфейсе администратора. Вы можете использовать , используя атрибут session-registry-alias, , указывая ему имя, которое вы можете использовать в другом месте в своей конфигурации.

session-registry-ref. Пользователь может предоставить свою собственную реализацию SessionRegistry, используя атрибут session-registry-ref . Другой компонент управления сеансом будет подключен к нему.

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