📄 authenticationphaselistener.java
字号:
/* * Copyright (c) 2007, Sun Microsystems, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of Sun Microsystems, Inc. nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */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 + -