我在portlet中遇到http vs https链接有问题。我使用jboss liferay 6.0,但在这种情况下它并不相关。
Portlet可以在http或https模式下使用。 Portlet标记创建绝对URL。我需要这个相对与http vs https正常工作。
我知道安全属性,但我不希望它始终安全。
<portlet:renderURL var="detailLink">
<portlet:param name="id" value="${recordId}" />
<portlet:param name="backURL" value="${backLink}" />
</portlet:renderURL>
请不要使用javascript。
谢谢
答案 0 :(得分:0)
在服务器上,您将知道您是处于http模式还是http模式。所以你可以用这样的东西来创建服务器端
PortletUrl detailLink renderResponse.createRenderUrl();
detailLink.setSecure(renderRequest.isSecure());
//set all the params on detailLink here
model.setAttribute("detailLink",detailLink);
答案 1 :(得分:0)
您可以在此处使用相对网址概念...
如果您不想继续使用javascript,那么您可以在jsp页面中创建一个Java方法,最好是在一个常见的jsp页面中,如init.jsp,并放置以下方法:
<%!
private String _getRelativePath(String cURL) {
if (Validator.isNull(cURL)) {
return cURL;
}
if (cURL.startsWith(Http.HTTP)) {
int pos = cURL.indexOf(
StringPool.SLASH, Http.HTTPS_WITH_SLASH.length());
cURL = cURL.substring(pos);
}
return cURL;
}
%>
您可以在您的网址上调用此方法,它将返回包含路径和参数的字符串。
例如;如果你将cURL传递给
http://localhost:8080/web/guest/home?p_p_id=58&p_p_lifecycle=1&p_p_state=pop_up&p_p_mode=view&_58_struts_action=%2Flogin%2Flogin
然后它会返回
/web/guest/home?p_p_id=58&p_p_lifecycle=1&p_p_state=pop_up&p_p_mode=view&_58_struts_action=%2Flogin%2Flogin
此外,您可以使用 themeDisplay.getURLPortal()方法拆分绝对网址,以获取所需的相对网址。
<%!
private String _getRelativePath(String cURL, ThemeDisplay themeDisplay) {
if (Validator.isNull(cURL)) {
return cURL;
}
String [] urlArr = cURL.split(themeDisplay.getURLPortal());
return urlArr[1];
}
%>
此机制将满足您的要求。