📄 authenticationphaselistener.java
字号:
/* * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://javaserverfaces.dev.java.net/CDDL.html or * legal/CDDLv1.0.txt. * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * [Name of File] [$Id: AuthenticationPhaseListener.java,v 1.1.1.1 2006/08/10 01:09:25 msreddy Exp $] [Date] * * Copyright 2006 Sun Microsystems Inc. All Rights Reserved */package enterprise.jsf_jpa_war;import javax.el.ELContext;import javax.el.ValueExpression;import javax.faces.FacesException;import javax.faces.context.ExternalContext;import javax.faces.context.FacesContext;import javax.faces.event.PhaseEvent;import javax.faces.event.PhaseId;import javax.faces.event.PhaseListener;/** * <p>This <code>PhaseListener</code> will be take action before * the <code>Restore View</code> phase is invoked. This allows * us to check to see if the user is logged in before allowing them * to request a secure resource. If the user isn't logged in, then * the listener will move the user to the login page.</p> * @author rlubke */public class AuthenticationPhaseListener implements PhaseListener { /** * <p>The outcome to trigger navigation to the login page.</p> */ private static final String USER_LOGIN_OUTCOME = "login"; // ---------------------------------------------- Methods from PhaseListener /** * <p>Determines if the user is authenticated. If not, direct the * user to the login view, otherwise all the user to continue to the * requested view.</p> * * <p>Implementation Note: We do this in the <code>afterPhase</code> * to make use of the <code>NavigationHandler</code>.</p> */ public void afterPhase(PhaseEvent event) { FacesContext context = event.getFacesContext(); if (userExists(context)) { // allow processing of the requested view return; } else { // send the user to the login view if (requestingSecureView(context)) { context.responseComplete(); context.getApplication(). getNavigationHandler().handleNavigation(context, null, USER_LOGIN_OUTCOME); } } } /** * <p>This is a no-op.</p> */ public void beforePhase(PhaseEvent event) { } /** * @return <code>PhaseId.RESTORE_VIEW</code> */ public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW; } // --------------------------------------------------------- Private Methods /** * <p>Determine if the user has been authenticated by checking the session * for an existing <code>Wuser</code> object.</p> * * @param context the <code>FacesContext</code> for the current request * @return <code>true</code> if the user has been authenticated, otherwise * <code>false</code> */ private boolean userExists(FacesContext context) { ExternalContext extContext = context.getExternalContext(); return (extContext.getSessionMap().containsKey(UserManager.USER_SESSION_KEY)); } /** * <p>Determines if the requested view is one of the login pages which will * allow the user to access them without being authenticated.</p> * * <p>Note, this implementation most likely will not work if the * <code>FacesServlet</code> is suffix mapped.</p> * * @param context the <code>FacesContext</code> for the current request * @return <code>true</code> if the requested view is allowed to be accessed * without being authenticated, otherwise <code>false</code> */ private boolean requestingSecureView(FacesContext context) { ExternalContext extContext = context.getExternalContext(); String path = extContext.getRequestPathInfo(); return (!"/login.jsp".equals(path) && !"/create.jsp".equals(path)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -