[英]Protocol redirection upon RenderRequest
我正在研究一個在Liferay Portal服務器上使用Spring Portlet-MVC框架和Velocity的項目。 對於幾頁,我們需要在安全連接上為它們提供服務。 作為Portlet的新手,我想到了鏈接到Action-Method並從那里重定向的解決方案。
@ActionMapping(params = "command=secureRedirect")
public void actionSecureRedirect(ActionRequest request, ActionResponse response) {
HttpServletRequest servletRequest = PortalUtil.getHttpServletRequest(request);
String absoluteUrl = servletRequest.getRequestURL().toString();
String[] urlComponents = StringUtils.split(absoluteUrl, '/');
StringBuffer redirectUrl = new StringBuffer("https://");
redirectUrl.append(urlComponents[1]);
redirectUrl.append("<specificPath>");
response.sendRedirect(redirectUrl.toString());
}
我的解決方案有效,但對我來說似乎並不好。 我想知道是否有人會想到另一種更透明的方法(使用RenderMappings上的Interceptor和Annotations?)。
任何建議將不勝感激!
在某些頁面上,您指的是Liferay頁面,還是只關心用戶單擊portlet中的某些鏈接時生成的URL。
如果要確保Portlet的某些鏈接安全,則在使用liferay-portlet時,或使用renderURL或actionURL。 它具有一個稱為secure的屬性,如果將其設置為true,它將使您的URL以https開頭
如果您正在尋找一些liferay頁面(例如/ web / guest / mypage)以確保安全,那么它是一種hack,我真的不建議任何人這樣做,但是如果您沒有其他選擇,則可以創建服務預先掛接並檢查您關注的網址格式,然后重定向到該網址的https版本。
write this code in controller
protected PortletURL getRedirectURL(ActionRequest actionRequest) {
ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
String portletName = (String) actionRequest.getAttribute(WebKeys.PORTLET_ID);
PortletURL redirectURL = PortletURLFactoryUtil.create(PortalUtil.getHttpServletRequest(actionRequest), portletName, themeDisplay.getLayout().getPlid(),
PortletRequest.RENDER_PHASE);
return redirectURL;
}
@ActionMapping(params="something")
public void save(ActionRequest actionRequest, Other parameters){
/.....Your code
.....//
redirectURL = getRedirectURL(actionRequest);
actionResponse.sendRedirect(redirectURL.toString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.