如何在 Websphere Portal 中生成注销 link?
How to generate a logout link in Websphere Portal?
我正在尝试生成注销 link,因此我不必使用 websphere 门户的默认注销 link。我试过这个:
MyLogoutUrlGenerator:
public String generateLogoutUrl(RenderRequest req, RenderResponse res)
throws [...] {
String logoutUrl = "";
Context ctx = new InitialContext();
PortletServiceHome stateMgrServiceHome = (PortletServiceHome) ctx
.lookup("portletservice/com.ibm.portal.state.service.PortletStateManagerService");
PortletStateManagerService service = (PortletStateManagerService) stateMgrServiceHome
.getPortletService(PortletStateManagerService.class);
PortletStateManager stateMgr = service.getPortletStateManager(req, res);
final URLFactory urlFactory = stateMgr.getURLFactory();
EngineURL url = urlFactory.newURL(null);
LogoutActionAccessorFactory logoutFactory = (LogoutActionAccessorFactory) stateMgr
.getAccessorFactory(LogoutActionAccessorFactory.class);
logoutUrl = url.writeDispose(new StringWriter()).toString();
stateMgr.dispose();
return logoutUrl;
}
Controller.java:
@RenderMapping()
public ModelAndView showLatestNews(PortletPreferences pref, RenderRequest req, RenderResponse res) {
ModelAndView mav = new ModelAndView("news/newsflash");
[...]
try {
mav.addObject("logoutUrl", generateLogoutUrl(req, res));
} catch ([...]){
e.printStackTrace();
}
return mav;
}
newflash.jsp:
...
<a href="${logoutUrl}">Logout</a>
...
这是我在 this post 中找到的一段代码的修改版本。但我无法让它工作。
我看过很多这样的帖子:
redirect.logout=true
redirect.logout.ssl=false
redirect.logout.url=protocol://host_name/logout_page
但这对我没有帮助。
我只想生成一个注销 url,我可以将其传递给 <a></a>
。我正在使用 Websphere Portal 8.5 和 Spring 4.3.2。
提前致谢。
通常在Portal Theme中添加注销link;我假设您想从其他位置触发注销?
我建议在主题(动态内容点)中这样做,例如header。然后您不需要任何 java 代码。
例如,在您的主题 commonActions.jsp 中:
<a id="logoutlink" href="<portal-navigation:url command='LogoutUser' keepNavigationalState='false'/>"><portal-fmt:text key="link.logout" bundle="nls.engine"/></a>
这是默认的方式。然后,如果您需要在别处使用它,您可以通过 java 脚本自己访问此 link。
我正在尝试生成注销 link,因此我不必使用 websphere 门户的默认注销 link。我试过这个:
MyLogoutUrlGenerator:
public String generateLogoutUrl(RenderRequest req, RenderResponse res)
throws [...] {
String logoutUrl = "";
Context ctx = new InitialContext();
PortletServiceHome stateMgrServiceHome = (PortletServiceHome) ctx
.lookup("portletservice/com.ibm.portal.state.service.PortletStateManagerService");
PortletStateManagerService service = (PortletStateManagerService) stateMgrServiceHome
.getPortletService(PortletStateManagerService.class);
PortletStateManager stateMgr = service.getPortletStateManager(req, res);
final URLFactory urlFactory = stateMgr.getURLFactory();
EngineURL url = urlFactory.newURL(null);
LogoutActionAccessorFactory logoutFactory = (LogoutActionAccessorFactory) stateMgr
.getAccessorFactory(LogoutActionAccessorFactory.class);
logoutUrl = url.writeDispose(new StringWriter()).toString();
stateMgr.dispose();
return logoutUrl;
}
Controller.java:
@RenderMapping()
public ModelAndView showLatestNews(PortletPreferences pref, RenderRequest req, RenderResponse res) {
ModelAndView mav = new ModelAndView("news/newsflash");
[...]
try {
mav.addObject("logoutUrl", generateLogoutUrl(req, res));
} catch ([...]){
e.printStackTrace();
}
return mav;
}
newflash.jsp:
...
<a href="${logoutUrl}">Logout</a>
...
这是我在 this post 中找到的一段代码的修改版本。但我无法让它工作。 我看过很多这样的帖子:
redirect.logout=true
redirect.logout.ssl=false
redirect.logout.url=protocol://host_name/logout_page
但这对我没有帮助。
我只想生成一个注销 url,我可以将其传递给 <a></a>
。我正在使用 Websphere Portal 8.5 和 Spring 4.3.2。
提前致谢。
通常在Portal Theme中添加注销link;我假设您想从其他位置触发注销?
我建议在主题(动态内容点)中这样做,例如header。然后您不需要任何 java 代码。
例如,在您的主题 commonActions.jsp 中:
<a id="logoutlink" href="<portal-navigation:url command='LogoutUser' keepNavigationalState='false'/>"><portal-fmt:text key="link.logout" bundle="nls.engine"/></a>
这是默认的方式。然后,如果您需要在别处使用它,您可以通过 java 脚本自己访问此 link。