문제

Ok 간단한 질문입니다.가 JSF 응용 프로그램을 포함하는,로그인 페이지입니다.문제입니다 경우에는 사용자 로그인 페이지 잎을 위해 그것을하는 동안,다음을 시도하는 로그인이션이 만료 및 ViewExpiredException 가 발생합니다.나는 리디렉션할 수 있습 다시 로그인하면 이런 일이 발생하지 않는 매우 부드럽습니다.할 수 있는 방법이 허용 흐름을 올바로 로그인하지 않고 추가 시도는?

도움이 되었습니까?

해결책

업데이트

로 Mojarra2.1.19/2.2.0 설정할 수 있습는 일시적인 특성 <f:view> true:

<f:view transient="true">
     Your regular content
</f:view>

할 수 있습에 대한 읽어 Balusc 의 블로그 여기:

http://balusc.blogspot.com.br/2013/02/stateless-jsf.html

를 사용하는 경우 Facelets 당신은 당신의 자신을 만들 수 있습니다 ViewHandler 이를 처리하기:

public class LoginViewHandler extends FaceletViewHandler
{
    public LoginViewHandler( ViewHandler viewHandler )
    {
        super( viewHandler );
    }

    @Override
    public UIViewRoot restoreView( FacesContext ctx, String viewId )
    {
        UIViewRoot viewRoot = super.restoreView( ctx, viewId );

        if ( viewRoot == null && viewId.equals( "/login.xhtml" ) )
        {
            // Work around Facelet issue
            initialize( ctx );

            viewRoot = super.createView( ctx, viewId );
            ctx.setViewRoot( viewRoot );

            try
            {
                buildView( ctx, viewRoot );
            }
            catch ( IOException e )
            {
                log.log( Level.SEVERE, "Error building view", e ); 
            }
        }

        return viewRoot;
    }
}

변경"/로그인합니다.xhtml"귀하의 로그인 페이지입니다.이지 확인할 수 있는 경우 복원하고 보고할 수 없는 경우 및 현재 보 귀하의 로그인 페이지를 만들고 뷰를 작성합니다.

이 설정에서 face-config.xml 다음과 같다:

<application>
    <!-- snip -->
    <view-handler>my.package.LoginViewHandler</view-handler>
</application>

를 사용하는 경우 JSF 없이 Facelets(i.eJsp)시도할 수 있습니다 클래스를 가지고 확장 ViewHandlerWrapper-note buildView()을 사용할 수 없습니다.희망 createView()에 그것의 자신의보기를 설정을 올바르게 하지만 나는 100%확실하지 않으로 JSF/JSP.

다른 팁

로그인 페이지가 실제로 필요하지 않은 경우 세션 범위에있는 것처럼 들립니다. 로그인 페이지의 경우 요청 범위가 적합해야합니다 (실제로 사용자 로그인하기 전에 세션에 아무것도 없어야 함). 사용자가 로그인하면이 문제가 자르기가 될 수 있지만 Phill의 아이디어는 매우 좋습니다.

JSP를 사용하면이 지침을 포함한 페이지의 세션을 비활성화 할 수 있습니다. <%@ page session="false" %>. JSF와 비슷한 것이 있어야합니다.

약간 해킹 된 솔루션 몇 가지 :

  • (매우 해킹) 사용 a <meta http-equiv="refresh" content="5"/> 태그로 페이지를 자동으로 다시로드하십시오.
  • JavaScript 함수를 사용하여 세션을 살리기 위해 서버에 '핑'요청을 주기적으로 보냅니다.

우리는 사용 얼음 세션이 만료되었을 때 자동으로 감지하고 팝업을 표시하는 직장에서는 사실을 알립니다. 그러나 우리는 때때로 로그인 페이지에 어떤 이유로 문제가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top