2016-11-02 1 views
3

일부 조건이 충족되는 경우 logout user를 강제 실행해야한다는 요구 사항이 있습니다. 나는 PostLoginAction 후크를 작성하여 조건을 확인하고 조건이 충족 될 때 getSession().invalidate()을 수행했습니다. 그러나 이후에 활성 세션이 없기 때문에 Liferay는 기본적으로 로그인 화면으로 이동합니다 (필터를 많이 사용함). /ROOT/html/common/ 안에있는 오류 페이지 중 하나로 리디렉션하려고하면 내부 서버 오류 페이지가 나타납니다.Liferay에서 강제로 로그 아웃 한 후 사용자 정의 오류 페이지 표시

이 시점에서 오류 메시지를 표시해야하지만 모든 리디렉션이 로그인 페이지에 표시됩니다. 이 일을 올바르게 수행하려면 어떻게해야할까요?

그냥 다른 페이지로 리디렉션하지 않고 로그인 페이지 자체에 오류 메시지를 표시하는 방법이 있습니까? 나는 동일한 방법을 사용하여 sessionErrors.add() 메서드를 사용하여 시도했지만 너무 효과가 없습니다.

더 자세한 정보가 필요하면 알려주세요.

+1

0 내가 바로 그것을받을 수 있나요 =? 문제를 더 잘 설명하기 위해 현재'PostLoginAction'을 추가 할 수 있습니까? –

+1

liferay에서 "login.events.pre"후크를 만들고 동작 클래스에서 사용자 세션을 무효화하려고 시도 했습니까? –

+0

@TobiasLiefke - 내 코드는 아래의 답변과 거의 비슷합니다. – buch11

답변

1

  1. 주어진 소품

    login.events.post = COM

    와 후 로그인 이벤트 후크 플러그인을
  2. 만들기 portal.properties 만들기 달성하기위한 다음 단계를 따르십시오. liferay.sample.hook.LoginActionRedirect

  3. 항목을 l iferay-hook.xml

    portal.properties

  4. 만들기 클래스 LoginActionRedirect

    package com.liferay.sample.hook; 
    
    import java.io.IOException; 
    
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    
    import com.liferay.portal.kernel.events.Action; 
    import com.liferay.portal.kernel.events.ActionException; 
    
    public class LoginActionRedirect extends Action { 
    
    @Override 
    public void run(HttpServletRequest req, HttpServletResponse res) 
         throws ActionException { 
        System.out.println("Invalidating user"); 
        req.getSession().invalidate(); 
        try { 
         //Use page URL to be redirected 
         res.sendRedirect(req.getContextPath()+"/web/guest/WCM"); 
        } catch (IOException e) { 
    
         System.out.println("Something went wrong while performing IO operations"); 
        } 
    } 
    

    }, portal-ext.properties 파일에 다음 속성을 추가 로케일로 리디렉션을 피하기 위해

  5. 앞쪽에 붙임 ​​

    locale.prepend.friendly.url.s 당신은 사용자가 로그인 후 사용자 _immediately_을 로그 아웃 할 - tyle은

+0

이것은 정확히 내가 뭘하는지, 나의 질문은 "/ web/guest/WCM"아래에 사용자 정의 HTML을 넣고 sendReirect를 수행하여 상황을 처리하는 유효한/최선의 방법인지 여부입니다. – buch11

+0

현재 response.sendRedirect ("/ html/common/loginBreaker.html "); 그리고 그 html을 평상시 설치 webapps/ROOT/html/common/폴더 아래에 두었습니다. – buch11

+0

@ buch11 포털의 사용자 정의 페이지에서 웹 컨텐츠를 사용하는 것이 더 나은 접근 방법입니다. 1) 필요 없음 내용이나 페이지가 변경된 경우 서버를 다시 시작하십시오. 2) 변경 사항은 후크를 사용하여 서버에서 쉽게 배포하거나 끌어 올 수 있습니다. 추가 문제가 있으면 알려주십시오. –

관련 문제