2010-12-17 85 views
4

如果您尝试重新登录,并且实际上甚至使当前登录的用户登录,那么Apparantely liferay不记录当前登录的用户。 所以我试图强制注销。liferay:如何首先强制注销自动登录钩

我想:

request.getSession().invalidate(); 

但是,这似乎并没有除了不知何故破登录功能工作。

我想知道如果有人有任何其他想法如何强制注销。

编辑:

try { 
      HttpSession session = request.getSession(); 

      EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_PRE, 
        PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_PRE), request, response); 

      String domain = CookieKeys.getDomain(request); 

      Cookie companyIdCookie = new Cookie(CookieKeys.COMPANY_ID, 
        StringPool.BLANK); 

      if (Validator.isNotNull(domain)) { 
       companyIdCookie.setDomain(domain); 
      } 

      companyIdCookie.setMaxAge(0); 
      companyIdCookie.setPath(StringPool.SLASH); 

      Cookie idCookie = new Cookie(CookieKeys.ID, StringPool.BLANK); 

      if (Validator.isNotNull(domain)) { 
       idCookie.setDomain(domain); 
      } 

      idCookie.setMaxAge(0); 
      idCookie.setPath(StringPool.SLASH); 

      Cookie passwordCookie = new Cookie(CookieKeys.PASSWORD, 
        StringPool.BLANK); 

      if (Validator.isNotNull(domain)) { 
       passwordCookie.setDomain(domain); 
      } 

      passwordCookie.setMaxAge(0); 
      passwordCookie.setPath(StringPool.SLASH); 

      CookieKeys.addCookie(request, response, companyIdCookie); 
      CookieKeys.addCookie(request, response, idCookie); 
      CookieKeys.addCookie(request, response, passwordCookie); 

      try { 
       session.invalidate(); 
      } catch (Exception e) { 
      } 

      EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_POST, 
        PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_POST), request, response); 
     } catch (Exception e) { 
      try { 
       PortalUtil.sendError(e, request, response); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (ServletException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

给出关于cookiekeys/processorserviceutil noclassdeffounderrors/...这取决于我有一个更基础层面进行更换。 (像processorserviceutil与processorerviceimpl并从proeccesorserviceutil复制功能代码)。如果认证是由应用服务器会话,它不是管理

回答

-1

1)session.invalidate()只适用;)

2)不管你是否使用社区版或企业版,你应该有足够的源代码实现任何你想要的

3)portal-ext.properties支持登录链以及前和登录后钩

4)注销调用com.liferay.portal.action.LogoutAction含有一堆的逻辑,但不破坏结局,它应该给你足够的动摇其他Liferay认证部分零件丢失。

希望这会有所帮助。

+0

我要走这条路线,但试图使用PropsValues得到我:java.lang.NoClassDefFoundError:com/liferay/portal/util/PropsValues任何想法为什么发生这种情况? (我正在寻找钩子路线) – jack 2010-12-20 10:04:33

+0

PropsValues包装在portal-impl中,可能需要一个ext项目(假设Liferay 6),但我需要检查。如果您使用的是LR6和eclipse,我强烈建议使用可从帮助>市场>搜索liferay获得的Eclipse插件。奇才很棒。 – 2010-12-20 10:39:51

+0

我认为钩子和ext插件有相同的访问权限吗?我使用liferay eclipse插件来创建钩子。这就是我为什么添加一个包含该类的jar的困惑。 (liferay 6.0.5) – jack 2010-12-20 11:28:20