IT TIP

JSF 2.0에서 세션을 무효화하는 방법은 무엇입니까?

itqueen 2020. 12. 10. 21:34
반응형

JSF 2.0에서 세션을 무효화하는 방법은 무엇입니까?


JSF 2.0 애플리케이션 내에서 세션을 무효화하는 가장 좋은 방법은 무엇입니까? JSF 자체가 세션을 처리하지 않는다는 것을 알고 있습니다. 지금까지 찾을 수있었습니다

private void reset() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
}
  1. 이 방법이 맞습니까? ServletAPI를 건드리지 않고 방법이 있습니까?
  2. @SessionScopedUserBean이 사용자의 로그인 로그 아웃을 처리 하는 시나리오를 고려하십시오 . 이 메서드는 같은 빈에 있습니다. 이제 reset()필요한 DB 업데이트를 마친 후 메서드를 호출하면 현재 세션 범위 빈은 어떻게됩니까? 빈 자체도 저장되기 때문에 HttpSession?

첫째,이 방법이 맞습니까? ServletAPI를 건드리지 않고 방법이 있습니까?

ExternalContext#invalidateSession()Servlet API를 가져 오지 않고도 세션을 무효화하는 데 사용할 수 있습니다 .

@ManagedBean
@SessionScoped
public class UserManager {

    private User current;

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "/home.xhtml?faces-redirect=true";
    }

    // ...

}

현재 세션 범위 Bean은 어떻게됩니까? 빈 자체도 HttpSession에 저장되기 때문에?

현재 응답에서는 여전히 액세스 할 수 있지만 다음 요청에서는 더 이상 존재하지 않습니다. 따라서 무효화 후 리디렉션 (새 요청)이 실행되는 것이 중요합니다. 그렇지 않으면 이전 세션의 데이터가 계속 표시됩니다. faces-redirect=true위의 예에서와 같이 결과 에 추가 하여 리디렉션을 수행 할 수 있습니다 . 리디렉션을 보내는 또 다른 방법은 ExternalContext#redirect().

public void logout() throws IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.invalidateSession();
    ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
}

그러나 탐색 결과를 사용하는 것이 더 간단하기 때문에이 컨텍스트에서는 사용이 의심 스럽습니다.


public void logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}

참고 URL : https://stackoverflow.com/questions/5619827/how-to-invalidate-session-in-jsf-2-0

반응형