📄 login_engine.java
字号:
//// ____.// __/\ ______| |__/\. _______// __ .____| | \ | +----+ \// _______| /--| | | - \ _ | : - \_________// \\______: :---| : : | : | \________>// |__\---\_____________:______: :____|____:_____\// /_____|//// . . . i n j a h i a w e t r u s t . . .////// Login_Engine// EV 23.01.20001//// getInstance()// authoriseRender()// renderLink()// needsJahiaData()// handleActions()//package org.jahia.engines.login;import java.util.*; // HashMapimport javax.servlet.http.*; // HttpSessionimport org.jahia.exceptions.*; // JahiaExceptionimport org.jahia.exceptions.JahiaSessionExpirationException;import org.jahia.utils.*; // JahiaConsoleimport org.jahia.data.*; // JahiaData, ConnectionTypesimport org.jahia.params.*; // ParamBeanimport org.jahia.registries.*; // ServicesRegistryimport org.jahia.engines.*; // JahiaEngine interfaceimport org.jahia.data.events.*; // JahiaEventimport org.jahia.services.usermanager.*; // JahiaUserManagerimport org.jahia.services.sites.*; // JahiaSiteimport org.jahia.services.pages.*; // JahiaPagepublic class Login_Engine implements JahiaEngine { private static final String CLASS_NAME = JahiaEngine.class.getName(); private static Login_Engine theObject = null; private String engineName = "login"; private static final String LOGIN_JSP = "login"; private static final String BADLOGIN_JSP = "bad_login"; private static final String CLOSE_JSP = "login_close"; private EngineToolBox toolBox; /*** * constructor * */ private Login_Engine() { // JahiaConsole.println( "Engine", "***** Starting Login Engine *****" ); toolBox = EngineToolBox.getInstance(); } // end constructor /*** * returns a single instance of the object * */ public static synchronized Login_Engine getInstance() { if (theObject == null) { theObject = new Login_Engine(); } return theObject; } // end getInstance /*** * authorises engine render * */ public boolean authoriseRender( ParamBean jParams ) { return true; // always allowed to render login } // end authoriseRender /*** * renders link to pop-up window * */ public String renderLink( ParamBean jParams, Object theObj ) throws JahiaException { String theUrl = jParams.composeEngineUrl( engineName, "" ); return theUrl; } // end renderLink /*** * specifies if the engine needs the JahiaData object * */ public boolean needsJahiaData( ParamBean jParams ) { return false; } // end needsJahiaData /*** * handles the engine actions * * @param jParams a ParamBean object * @param jData a JahiaData object (not mandatory) * */ public void handleActions( ParamBean jParams, JahiaData jData ) throws JahiaException, JahiaSessionExpirationException { // initalizes the hashmap HashMap engineMap = new HashMap(); initEngineMap( jParams, engineMap ); processScreen( jParams, engineMap ); // displays the screen toolBox.displayScreen( jParams, engineMap ); } // end handleActions /*** * prepares the screen requested by the user * * @param jParams a ParamBean object * */ public void processScreen( ParamBean jParams, HashMap engineMap ) throws JahiaException, JahiaSessionExpirationException { JahiaConsole.println(CLASS_NAME+".processScreen","started"); // gets the actual screen // screen can be "edit" or "save" String theScreen = jParams.getRequest().getParameter( "screen" ); if (theScreen == null) { theScreen = "edit"; } boolean ok = false; JahiaUser theUser = null; String username = jParams.getRequest().getParameter( "username" ); String password = jParams.getRequest().getParameter( "password" ); if ((username == null) || (password == null)) { return; } else { if (theScreen.equals( "save" )) { ServicesRegistry theRegistry = ServicesRegistry.getInstance(); if (theRegistry != null) { JahiaUserManagerService theService = theRegistry.getJahiaUserManagerService(); if (theService != null) { // Check if the user has site access ( even though it is not a user of this site ) theUser = ServicesRegistry.getInstance() .getJahiaSiteUserManagerService() .getMember( jParams.getSiteID(),username ); if ( theUser != null ){ if (theUser.verifyPassword( password )) { ok = true; } else { JahiaException je = new JahiaException( "Login error", "User " + username + " entered bad password", JahiaException.SECURITY_ERROR, JahiaException.WARNING); } } else { // user could be external database user, let's look him up... JahiaUser extUser = ServicesRegistry.getInstance().getJahiaUserManagerService().lookupUser(username); if ( extUser != null) { if (!(extUser instanceof JahiaDBUser)) { if (extUser.verifyPassword(password)) { theUser = extUser; ok = true; } else { JahiaException je = new JahiaException( "Login error", "User " + username + " entered bad password", JahiaException.SECURITY_ERROR, JahiaException.WARNING); } } } } } } } } if (ok) { JahiaConsole.finalPrintln("Login_Engine","User " + theUser.getUsername() + " logged in." ); // jParams.invalidateSession(); // this is necessary to remove references to old objects jParams.purgeSession(); HttpSession theSession = jParams.getSession(); theSession.setAttribute( jParams.SESSION_USER, theUser ); String loginChoice = jParams.getRequest().getParameter("loginChoice"); boolean stayAtCurrentPage = ( loginChoice != null && loginChoice.equals("1") ); JahiaPage loginPage = null; if ( stayAtCurrentPage ){ JahiaPageBaseService pageService = JahiaPageBaseService.getInstance(); try { loginPage = (JahiaPage)pageService .lookupPage (jParams.getPageID(),jParams); if ( loginPage != null && !loginPage.checkReadAccess(theUser)){ JahiaConsole.println("Login_engine","The user do not have read access to the requested page ( other than GUEST ) !"); JahiaException je = new JahiaException( "Login error", "User " + username + " cannot log in from this page", JahiaException.SECURITY_ERROR, JahiaException.WARNING); engineMap.put("notAllowedToLoginFromThisPage", new Boolean(true)); engineMap.put( "screen", "edit" ); engineMap.put( "engineUrl", jParams.composeEngineUrl( engineName, "" ) ); engineMap.put( "jspSource", BADLOGIN_JSP ); return; /* JahiaUser guestUser = ServicesRegistry.getInstance() .getJahiaUserManagerService().lookupUser(jParams.getSiteID(),JahiaUserManagerService.GUEST_USERNAME); //theSession.setAttribute( jParams.SESSION_USER, guestUser ); loginPage = (JahiaPage)pageService .lookupPage (jParams.getPageID(),jParams); if ( loginPage != null ){ JahiaConsole.println("Login_engine","Switch the user to GUEST USER"); theUser = guestUser; theSession.setAttribute( jParams.SESSION_USER, theUser ); } */ } } catch ( Throwable t ){ JahiaConsole.println("Login_engine","Eception looking at page : " + jParams.getPageID()); t.printStackTrace(); } } JahiaConsole.println("Login_engine","Page to log to is null (2) ! :" + jParams.getPageID()); if ( loginPage == null ) { loginPage = getHomepage(jParams.getSite(),theUser); } if ( loginPage == null ){ loginPage = jParams.getSite().getHomePage(); } engineMap.put( "engineUrl", jParams.composePageUrl(loginPage.getID()) ); JahiaConsole.println(CLASS_NAME+".processScreen","engineUrl="+jParams.composePageUrl(loginPage.getID())); JahiaEvent theEvent = new JahiaEvent( this, jParams, theUser ); ServicesRegistry.getInstance().getJahiaEventService().fireLogin( theEvent ); } else { engineMap.put("notAllowedToLoginFromThisPage", new Boolean(false)); engineMap.put( "screen", "edit" ); engineMap.put( "engineUrl", jParams.composeEngineUrl( engineName, "" ) ); engineMap.put( "jspSource", BADLOGIN_JSP ); //engineMap.put( "engineOutputFile", TEMPLATE_JSP ); } JahiaConsole.println(CLASS_NAME+".processScreen","end"); } // end processScreen /*** * inits the engine map * * @param jParams a ParamBean object (with request and response) * @return a HashMap object containing all the basic values needed by an engine * */ private void initEngineMap( ParamBean jParams, HashMap engineMap ) throws JahiaException { // init map String theScreen = jParams.getRequest().getParameter( "screen" ); if (theScreen == null) { theScreen = "edit"; } engineMap.put( "screen", theScreen ); if (!theScreen.equals("save")) { engineMap.put( "jspSource", LOGIN_JSP ); engineMap.put( "engineUrl", jParams.composeEngineUrl( engineName, "" ) ); engineMap.put( "engineName", engineName ); } else { engineMap.put( "engineName", "core" ); engineMap.put( "engineUrl", jParams.composePageUrl(jParams.getPageID()) ); engineMap.put( "jspSource", CLOSE_JSP ); } engineMap.put( "jParams", jParams ); engineMap.put( "renderType", new Integer(JahiaEngine.RENDERTYPE_FORWARD) ); engineMap.put( "jahiaBuild", new Integer(jParams.settings().getBuildNumber())); engineMap.put( "javascriptUrl", jParams.settings().getJsHttpPath() ); // JSP Attribute jParams.getRequest().setAttribute( "engineTitle", "Login" ); //jParams.getRequest().setAttribute( "engineMap", engineMap ); //jParams.getRequest().setAttribute( "jParams", jParams ); } // end initEngineMap /** * Return the first available home page for this user. * Personal homepage has precedence over groups' homepage. * * * @param JahiaSite current site. * @param JahiaUser the user. * @return JahiaPage the first available home page, null if none. * @author Khue Nguyen */ private JahiaPage getHomepage(JahiaSite site, JahiaUser user) throws JahiaException{ //JahiaConsole.println(CLASS_NAME+".getHomepage","started"); JahiaPage page = null; try { JahiaPageBaseService pageService = JahiaPageBaseService.getInstance(); // get user home page if ( user.getHomepageID() >= 0 ){ try { page = (JahiaPage)pageService .lookupPageWhitoutTemplates (user.getHomepageID()); if ( page != null ){ //JahiaConsole.println(CLASS_NAME+".getHomepage","found user homepage " + page.getTitle()); return page; } } catch ( Throwable t ){ t.printStackTrace(); } } // get group homepages JahiaGroupManagerService grpServ = ServicesRegistry.getInstance().getJahiaGroupManagerService(); Vector v = grpServ.getUserMembership(user); int size = v.size(); String grpKey = null; JahiaGroup grp = null; for ( int i=0 ; i<size ; i++ ){ grpKey = (String)v.get(i); grp = grpServ.lookupGroup(grpKey); if ( grp != null && grp.getSiteID() == site.getID() && grp.getHomepageID() >=0 ){ //JahiaConsole.println(CLASS_NAME+".getHomepage","found a group with homepage " + grp.getGroupname() + ", page=" + grp.getHomepageID() ); try { page = (JahiaPage)pageService .lookupPageWhitoutTemplates (grp.getHomepageID()); if ( page != null ){ //JahiaConsole.println(CLASS_NAME+".getHomepage","found group homepage =" + page.getTitle() ); return page; } } catch ( Throwable t ){ t.printStackTrace(); } } } } catch (Throwable t) { t.printStackTrace(); } return null; }} // end Login_Engine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -