2010-06-18 100 views
2

作为liferay/portal/portlet开发的新手段,您每天都会遇到问题。现在我试图从一个portlet注销,但还没有找到一种方法来实现它。你应该怎么做?我应该尝试发送某种注销事件还是什么?在Liferay资源中徘徊我发现了一个LogoutAction.java,看起来很有前途,但是如何触发它呢?从liferay portlet触发注销

最好问候安德斯奥姆

+0

你为什么不呈现常规的注销链接? – ewernli 2010-06-18 12:52:26

+0

我必须从我的一个bean中触发注销。 – Buzzzz 2010-06-18 14:35:46

+0

但是你能从portlet bean获得这样的URL吗? – Buzzzz 2010-06-18 14:43:46

回答

1

PortletSession.invalidate()?

+0

这只是使portlet失效,但其他portlet仍然启动并且门户用户仍然登录。 – Buzzzz 2010-06-18 14:45:14

+0

猜测更正确的标题本应触发门户注销。 – Buzzzz 2010-06-20 10:35:46

+0

我发现有LogoutAction映射到/门户/注销,所以重定向或提供链接可以工作。我还没有尝试过。 – 2010-06-22 12:43:16

3

尝试actionResponse.sendRedirect( “/ C /门/注销”)

+0

sendRedirect仅在ActionResponse上,而不在RenderResponse或ResourceResponse上。 – 2012-05-04 16:56:10

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 =假

然后在所有你的Portlet您必须设置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调用(第二次从第一次调用返回)。