2010-06-18 2 views
2

Будучи совершенно новым для развития liferay/portal/portlet, вы ежедневно сталкиваетесь с проблемами. Теперь я пытаюсь выйти из портлета, но не нашел способ сделать это. Как вы должны это делать? Должен ли я попытаться отправить какое-то событие выхода из системы или что-то еще? Грепинг в источниках жизни я нашел LogoutAction.java, который кажется многообещающим, но как это срабатывает?Запуск выхода из портлета liferay

С наилучшими пожеланиями Андерс Olme

+0

Почему бы вам не сделать обычную ссылку для выхода из системы? – ewernli

+0

Мне нужно вызвать выход из одной из моих боб. – Buzzzz

+0

Но можете ли вы дойти до такого URL-адреса из портлета? – Buzzzz

ответ

1

PortletSession.invalidate()?

+0

Это просто недействительно портлет, но другие портлеты все еще запущены и пользователь портала по-прежнему входит в систему. – Buzzzz

+0

Угадайте, что более правильным заголовком было бы инициирование выхода портала. – Buzzzz

+0

Я обнаружил, что LogoutAction отображается в/portal/logout, поэтому перенаправление туда или предоставление ссылки могут работать. Я еще не пробовал. –

3

попробовать actionResponse.sendRedirect ("/ с/портал/выход из системы")

+0

sendRedirect относится только к ActionResponse, а не RenderResponse или ResourceResponse. –

1

Вы можете создать журнал из ссылки на внутренней функциональности выхода из системы Liferay как этот в вашем JSP:

<%@page import="com.liferay.portal.util.PortalUtil"%> 
. 
. 
<a href="<%= PortalUtil.getPortalURL(request) %>/c/portal/logout">Log Out</a> 
0

После 2 -3 дня следствия Я добился входа и выхода с помощью ajax-звонков. Чтобы выйти из системы, это не так просто, как вызвать session.invalidate(), но настроить еще немного. Напишу, как я достиг этого:

Сначала редактировать свои portal-ext.properties и добавьте следующую строку: session.enable.phishing.protection = ложный

Тогда во всех ваших портлетов, вы должны установить private-session-attributes - false. Заказ имеет важное значение, поэтому я покажу вам мины:

<portlet> 
    <portlet-name>home</portlet-name> 
    <icon>/icon.png</icon> 
    <instanceable>false</instanceable> 
    <private-session-attributes>false</private-session-attributes> 
    <header-portlet-css>/css/main.css</header-portlet-css> 
    <footer-portlet-javascript>/js/home.js</footer-portlet-javascript> 
    <css-class-wrapper>home-portlet</css-class-wrapper> 
</portlet> 

После этого все остальное довольно просто. Для журнала в:

public static void login(ResourceRequest request,ResourceResponse response, String liferayUser, String liferayPassword) throws Exception{ 
    MethodKey key = new MethodKey("com.liferay.portlet.login.util.LoginUtil", "login", HttpServletRequest.class, HttpServletResponse.class, String.class, String.class, boolean.class, String.class); 
    PortalClassInvoker.invoke(false, key, new Object[] { PortalUtil.getHttpServletRequest(request), PortalUtil.getHttpServletResponse(response), liferayUser, liferayPassword, false, null});  
} 

И бревно из:

public static void logout(ResourceRequest resourceRequest) throws Exception{ 
    HttpServletRequest request = PortalUtil.getHttpServletRequest(resourceRequest); 
    request.getSession().invalidate(); 
} 

Я использовал ResourceRequest, потому что я делал Ajax звонки. Единственная «проблема» в том, что если вы вошли в систему и хотите выйти из системы &, войдите в систему с другим пользователем, которому вы должны выполнить 2 вызова ajax (второй из них один раз вернулся с первого).

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