Перенаправление протокола по RenderRequest - PullRequest
0 голосов
/ 22 марта 2012

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

@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 ]

2 голосов
/ 23 марта 2012

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

Если вы хотите обезопасить какую-либо ссылку портлета, то при использовании liferay-portlet flavour или renderURL или actionURL. У него есть атрибут secure, который при значении true заставит ваш URL начинаться с https

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

1 голос
/ 10 мая 2012
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());
}
...