RenderRequest上的协议重定向

时间:2012-03-22 08:53:15

标签: java spring spring-mvc portlet spring-portlet-mvc

我正在开发一个在Liferay Portal服务器上使用Spring Portlet-MVC框架和Velocity的项目。对于几页,我们要求在安全连接上提供服务。作为Portlets的新手我想出了一个链接到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吗?)。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:2)

通过某些页面,您的意思是Liferay页面,还是只关心当用户点击portlet中的某个链接时生成的url。

如果要使portlet的某些链接安全,那么在使用liferay-portlet flavor或renderURL或actionURL时。它有一个名为secure的属性,如果设置为true,则会使您的网址以https

开头

如果你正在寻找一些liferay页面(例如/ web / guest / mypage)是安全的那么它是一种黑客攻击我不会向任何人推荐这个,但是如果你没有别的选择,你可以创建服务预挂钩并检查您关注的网址格式并重定向到该网址的https版本。

答案 1 :(得分: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());
}