나는이 문제가 여러 번 논의 된 것을 알고 있지만, 나는 그 사실을 곧바로 이해하지 못했습니다. 이걸 한번 보시면 고맙겠습니다. 사용자가 예를 들어, 링크를 통해 내 응용 프로그램을 액세서하고자하는 경우로그인 후 요청한 페이지로 이동
:
그래서, 나는 다음과 같은 문제가
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;
}
}
감사합니다. 당신은 내 영웅입니다! – leostiw