2012-05-24 4 views
1

jsf 2.0 양식을 사용하여 사용자를 인증하려고합니다. 또한 UserPrincipals를 만들고 싶습니다. HttpServletRequest.login 메서드를 사용하여 새로운 UserPrincipal을 만들 수 있다고 생각했습니다. 내가 무슨 짓을 http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.htmlJSF 2.0 로그인 + 사용자 기본 설정

은 다음과 같습니다

포뮬러 :

<h:form> 
     <h:outputLabel value="Name" for="name"/> 
     <h:inputText id="name" value="#{userMng.user.name }"/> 
     <br/> 
     <h:outputLabel value="Passwort" for="pw"/> 
     <h:inputSecret id="pw" value="#{userMng.user.password }"/> 
     <br/> 
     <h:commandButton type="submit" value="Submit" action="#{ userMng.login }"/> 
    </h:form> 

UserMng (sessionscoped) : 로그인 방법 :

public String login() { 
     String ret = "error"; 
     if (user.getName().equals("test") && user.getPassword().equals("test")) { 
      FacesContext context = FacesContext.getCurrentInstance(); 
      HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 

     try { 
      request.login(this.user.getName(), this.user.getPassword()); 
      LOGGER.info("Login the user"); 
      ret = "success"; 
//   this.user = userDAO.find(this.username, this.password); 
     } catch (ServletException e) { 
      // Handle unknown username/password in request.login(). 
      context.addMessage(null, new FacesMessage("Unknown login")); 
     } 
    } 
    LOGGER.info(ret); 
    return ret; 
} 

하지만 난 UserPrincipal.getName를 인쇄 할 때 로그인 한 다음 전화 할 때 NullpointerException이 발생합니다.

request.getUserPrincipal().getName(); 

성공적인 로그인 후에 내 코드 또는 내 UserPrincipal을 만드는 방법이 잘못 되었습니까?

답변

3

사용자의 주요

보다도 로그인 후 후속 요청에서만 사용할 수 있습니다. 로그인 후에 리디렉션을 보내야 브라우저가 새 요청을 작성해야합니다.

ret = "success?faces-redirect=true"; 

사용자 이름을보기에 인쇄 할 때 EL을 사용하는 것이 좋습니다. HttpServletRequest은 이미 EL에 있으며 #{request}에 의해 사용 가능합니다.

<p>Welcome #{request.userPrincipal.name}!</p> 

하거나 바로 가기

<p>Welcome #{request.remoteUser}!</p> 
+0

내가 RET 할 때 = "성공 얼굴-리디렉션 = 사실?"; 내 탐색 규칙이 작동하지 않습니다. JSF가 성공 페이지로 리디렉션하지 않습니다 – veote

+0

또한 로그인 메소드가 새 사용자를 생성하지 않는 것으로 보입니다. UserPrincipal도 request.login 후에 내 로그인 메소드에서 인쇄하려고 할 때 null 객체입니다 – veote

+0

아직도 구식 XML 탐색 규칙을 사용하고 있습니까? 거기에''을 넣거나 viewId? faces-redirect = true "'와 같이'"viewId "'와 같은 암시 적 탐색으로 모든 탐색 규칙을 바꿉니다. – BalusC