2012-03-22 2 views
0

Я работаю над проектом, который использует структуру Spring Portlet-MVC и Velocity на сервере портала Liferay. Для нескольких страниц у нас есть требование обслуживать их в безопасном соединении. Будучи совершенно новым для Портлетов, я придумал решение связать с Action-Method и перенаправлять оттуда.Перенаправление протокола на RenderRequest

@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?).

Любые предложения будут очень благодарны!

ответ

2

Некоторые страницы, вы имеете в виду страницы Liferay, или вас просто беспокоит URL-адрес, который генерируется, когда пользователь нажимает на какую-либо ссылку из портлета.

Если вы хотите сделать некоторую ссылку портлета безопасным, тогда при использовании цветового эффекта портрета или renderURL или actionURL. Он имеет атрибут, называемый безопасный, который, если значение ИСТИНА сделает ваш URL, начиная с HTTPS

Если вы ищете какой-то LifeRay страницы (например,/веб/гостевую/MyPage), чтобы быть безопасным, то его вроде хака, и я бы действительно не предлагал это кому бы то ни было, но если у вас нет другого выбора, вы можете создать предварительный крючок сервиса и проверить шаблоны url, которые вас беспокоят, и перенаправить на https-версию этого URL-адреса.

1
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()); 
}