2013-05-02 2 views
0

나는이 문제가 여러 번 논의 된 것을 알고 있지만, 나는 그 사실을 곧바로 이해하지 못했습니다. 이걸 한번 보시면 고맙겠습니다. 사용자가 예를 들어, 링크를 통해 내 응용 프로그램을 액세서하고자하는 경우로그인 후 요청한 페이지로 이동

:

그래서, 나는 다음과 같은 문제가

http://example:8080/Kundenportal/protected/post/post.jsf 

그는 내 loginPage로 리디렉션됩니다

이제, 로그인 후, 사용자는 대신 그는 내가 사용자가 이후 리디렉션 할 내 응용 프로그램을 어떻게 알 수

http://example:8080/Kundenportal/protected/post/start.jsf. 

로 리디렉션됩니다

http://example:8080/Kundenportal/protected/post/post.jsf, 

에 도착하고 싶어 로그인? 나는 HttpRequestServlet을 통해 작동하지만, Phaselistener에서 loggedIn 여부를 확인한 후 사용자가 loginpage로 리다이렉트 될 것입니다. requestURL이 loginPage인지 아닌지를 의미합니다.

여기 내 코드입니다.

내 PhaseListener입니다 :

at.ooev.kp.controller.login.LoggedInCheck

:

@Override 
public void afterPhase(PhaseEvent event) { 
    FacesContext fc = event.getFacesContext(); 
    String currentPage = fc.getViewRoot().getViewId(); 

    HttpServletRequest origRequest = (HttpServletRequest) fc 
      .getExternalContext().getRequest(); 
    // Here is the requestURI post.xhtml 
    String reqURI = origRequest.getRequestURI(); 

    // boolean loginPage = page.startsWith("/login.xhtml"); 
    // boolean registerPage = page.startsWith("/registrierung.xhtml"); 

    boolean loginRequired = currentPage.startsWith("/protected/"); 
    if (loginRequired && !loggedIn(fc)) { 
     NavigationHandler nh = fc.getApplication().getNavigationHandler(); 
     nh.handleNavigation(fc, null, "loginFAILED"); 
     fc.renderResponse(); 

    } 

} 

좋아, 지금이 내가 얼굴 - confing.xhtml을 설정하는 방법입니다

<application> 
    <locale-config> 
     <default-locale>de</default-locale> 
     <supported-locale>de</supported-locale> 
    </locale-config> 
    <message-bundle>at.ooev.kp.messages</message-bundle> 
    <resource-bundle> 
     <base-name>at.ooev.kp.messages</base-name> 
     <var>messages</var> 
    </resource-bundle> 
</application> 
<navigation-rule> 
    <from-view-id>*</from-view-id> 
    <navigation-case> 
     <from-outcome>loginFAILED</from-outcome> 
     <to-view-id>/login.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>doLogin</from-outcome> 
     <to-view-id>/login.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>EXPIRED</from-outcome> 
     <to-view-id>/expired.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

<navigation-rule> 
    <from-view-id>*</from-view-id> 
    <navigation-case> 
     <from-outcome>PAGE_0_</from-outcome> 
     <to-view-id>/protected/start.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_1_1</from-outcome> 
     <to-view-id>/protected/pol/polizzen.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_1_2</from-outcome> 
     <to-view-id>/protected/sch/schaden.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_1_3</from-outcome> 
     <to-view-id>/protected/tk/topkundeninfo.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_2_</from-outcome> 
     <to-view-id>/protected/daten/daten.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_2_1</from-outcome> 
     <to-view-id>/protected/daten/kundendaten.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_2_2</from-outcome> 
     <to-view-id>/protected/daten/benutzer.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_3_1</from-outcome> 
     <to-view-id>/protected/post/post.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_4_1</from-outcome> 
     <to-view-id>/protected/komm/vereinbarung.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>PAGE_5_1</from-outcome> 
     <to-view-id>/protected/trans/transport.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

<navigation-rule> 
    <from-view-id>/login.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>loginOK</from-outcome> 
     <to-view-id>/protected/start.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>register</from-outcome> 
     <to-view-id>/registrierung.xhtml</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>loginPOST</from-outcome> 
     <to-view-id>/protected/post/post.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

그리고 이것은 로그인 파크 내 ManagedBean은 다음과 같습니다

@PermitAll 
public String login() { 
    FacesContext fc = FacesContext .getCurrentInstance(); 
    HttpServletRequest origRequest = (HttpServletRequest) fc.getExternalContext().getRequest(); 
    // The requestURI is here login.xhtml(because there was the redirection in the Phaselistener) 
    String str = origRequest.getRequestURI(); 

    if (doLogin(credentials.getUsername(), credentials.getPassword())) { 
     String realname = (!Utils.isEmpty(webbaUser.getVorname())) ? webbaUser 
       .getVorname() + " " 
       : ""; 
     realname += webbaUser.getName(); 
     user.setUsername(credentials.getUsername()); 
     user.setRealname(realname); 
     user.setKndnr(credentials.getUsername()); 
     if ("kunde".equalsIgnoreCase(credentials.getUsername())) 
      user.setKndnr("600828"); 
     user.setMailadresse(webbaUser.getEmail()); 
     user.setHostUserid(webbaUser.getHostuserid()); 

     HttpSession session = ((HttpServletRequest) FacesContext 
       .getCurrentInstance().getExternalContext().getRequest()) 
       .getSession(false); 
     session.setAttribute("LOGGEDINUSER", user.getUsername()); 
     dbLog.add(DbLogController.Aktion.LOGIN, user.getUsername()); 
     // List<String> kundennummern = webbaUser.getDatfilt(); 
     // for (String s : kundennummern) 
     // System.out.println("datfilt: " + s); 
     return "loginOK"; 
    } else { 
     FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage("Anmeldung fehlgeschlagen!")); 
     dbLog.add(DbLogController.Aktion.LOGINFAILED, 
       credentials.getUsername()); 
     user = null; 
     return null; 
    } 
} 

답변

1

위상 수신기의 LOGIN_REDIRECT와 같은 세션 속성에 URL을 보관하고 로그인 한 후에 사용하십시오.

스프링 보안과 같은 일부 프레임 워크가이를 수행합니다.

+1

감사합니다. 당신은 내 영웅입니다! – leostiw

관련 문제