2012-03-22 1 views
0

Liferay 포털 서버에서 스프링 포틀릿 -MVC 프레임 워크와 벨로 시티를 사용하는 프로젝트에서 작업하고 있습니다. 몇 페이지에 대해 우리는 안전한 연결을 위해 서비스를 제공해야합니다. 포틀릿에 대해 상당히 새롭기 때문에 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에 대해 우려하고 있습니다.

포틀릿 링크를 안전하게 만들려면 liferay-portlet flavor 또는 renderURL 또는 actionURL을 사용할 때. 그런 다음 안전한 것으로 (예 :/웹/손님/마이 페이지에 대한) 어떤을 Liferay 페이지를 찾고 있다면 당신의 URL이 https를

로 시작하는 것 true로 설정하면 보안이라는 속성을 가지고 그 일종의 해킹과 나는 정말로 이것을 누구에게나 제안하지만, 다른 옵션이 없다면 서비스 프리 훅을 만들고 걱정되는 URL 패턴을 확인하고 해당 URL의 https 버전으로 리디렉션 할 수 있습니다.

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