2015-02-03 3 views
1

Я хочу написать Hook на Java, который выполняется, если сеанс моего Liferay 5.2.3 Portal истекает.Установить Liferay Hook на тайм-аут сеанса

мне удалось написать Крюк, который выполняется всякий раз, когда пользователь нажимает на ссылку выхода из системы с помощью следующей установки в liferay-hook.xml:

<hook> 
    <event> 
     <event-class>com.extensions.hooks.LogoutHook</event-class> 
     <event-type>logout.events.pre</event-type> 
    </event> 
</hook> 

Однако Выход Крюк не дозвонился, если тайм-аут сеанса, но Мне нужно выполнить тот же метод в таймаут. Я не нашел тип события для таймаута сеанса.

Есть ли способ выполнить Java-метод, когда время сеанса истекает и идентифицировать идентификатор пользователя завершенной сессии?

ответ

5

Существует событие, которое будет срабатывать при Session экспирации/TimeOut события сеанса пользователя,

# Servlet session destroy event 
servlet.session.destroy.events = com.extensions.hooks.CustomPreSessionExpireAction 

Вы можете добавить это свойство в liferay-hook.xml или portal.properties [Написанная в Hook] или portal-ext.properties.

И может быть использован как,

public class CustomPreSessionExpireAction extends SessionAction { 

    @Override 
    public void run(HttpSession session) throws ActionException { 
     //Code 
    } 
} 

Однако, мы можем использовать только HttpSession здесь. Итак, вам нужно выяснить, как получить userId здесь.

спасибо

+1

спасибо большое, это работает! Я могу получить идентификатор пользователя из атрибута сессии «Long id = (Long) session.getAttribute (« USER_ID »);' – Simulant

+0

будет ли он вызываться, даже если браузер закрыт до истечения срока действия сеанса? – Spike

+0

Нет, он будет вызываться только тогда, когда истек сеанс сервера для пользователя. – Runcorn

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