2017-11-21 24 views
0

Liferay 7에서 사용자 정의 로그인을 구현하고 있습니다. 로그인 후크 포틀릿 용 모듈 하나와 ActionCommand 용 모듈입니다.LAST_PATH Liferay 7의 사용자 정의 로그인 후 작업의 리디렉션

또한 게시 로그인 이벤트를위한 클래스를 생성했습니다. 문제는 리디렉션이이 클래스 또는 로그인 훅 포틀릿의 JSP에서 작동하지 않는다는 것입니다.

이것은 LifecycleAction 내 코드입니다 :

@Component(
    immediate = true, 
    property = { 
     "key=login.events.post" 
    }, 
    service = LifecycleAction.class 
) 
public class UserLoginPostAction implements LifecycleAction { 

    private static final Log LOGGER = LogFactoryUtil.getLog(UserLoginActionCommand.class); 

    @Override 
    public void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException { 

     HttpServletRequest request = lifecycleEvent.getRequest(); 
     HttpServletResponse response = lifecycleEvent.getResponse(); 
     HttpSession session = request.getSession(); 

     try { 
      User currentUser = PortalUtil.getUser(request); 
      LOGGER.info("USER|" + currentUser.getFirstName() + "|" + currentUser.getGroup().toString()); 
      LOGGER.info("LASTPATH|" + session.getAttribute("LAST_PATH")); 
      LastPath lastPath = (LastPath) session.getAttribute("LAST_PATH"); 
      LOGGER.info(lastPath.getPath()); 
      session.setAttribute(WebKeys.LAST_PATH, lastPath); 
      response.sendRedirect(lastPath.getPath()); 
     } catch (PortalException | IOException exception) { 
      LOGGER.error(exception); 
     } 
    } 

} 

이 porlet 로그인 JSP 내 코드입니다 :

<c:choose> 
    <c:when test="<%= themeDisplay.isSignedIn() %>">   
     <% 
     response.sendRedirect(WebKeys.LAST_PATH); 
     %> 
    </c:when> 
    <c:otherwise> 
... 

내 LOGGER 콘솔에 정확한 값을 표시 할 수 있습니다.

감사합니다.

답변

0

로그인 후 전달은 약간 까다 롭습니다.

LAST_PATH 및 세션 속성을 사용하는 경우 Liferay에서 처리하므로 보내기 리디렉션 줄이 필요하지 않습니다. 마지막 경로는 'redirect'와 같은 URL 매개 변수의 영향을받을 수 있습니다.

전송 리디렉션 접근 방식을 사용하려는 경우 URL을 작성한 다음 작성한 URL을지나 sendRedirect() 호출을 지나치십시오. 세션 매개 변수를 사용하지 마십시오.

추 신 : 로그인을 수정하는 경우 로그인 포틀릿에 대한 무거운 재정의 대신 AuthPipeline을 살펴보십시오.

+0

리디렉션과 마찬가지로 숨겨진 입력 필드에도 값이 없습니다. 수동으로 값을 넣으려고했는데 로그인했을 때 성공적으로 페이지로 리디렉션되었습니다. 나는 그것이 그것이 가치를 얻을 것 인 방법으로 약간 혼란 스럽다. 매개 변수 redirect는 어디에서 값을 가져 오므로 리디렉션의 숨겨진 입력 값은? –

+0

위의 코드를 볼 수있는 경우 LAST_PATH와 마찬가지로 WebKeys.LAST_PATH를 세션으로 설정합니다. 나는 sendRedirect를 제거했다. 그러나, 그것도하지 않습니다. 로그인 포틀릿/JSP 및 로그인 게시물 샘플을 제공 할 수 있습니까? 또는 나는 무엇인가 놓치고 있냐? 고맙습니다. –

+0

saveLastPath 숨겨진 입력의 값을 true로 설정하고 리디렉션 입력을 제거/다시 넣으려고했습니다. 그것은 작동하지 않았다. –