requestprocessor.java

来自「开源项目CRM之OpenCustomer」· Java 代码 · 共 120 行

JAVA
120
字号
/*******************************************************************************
 * ***** BEGIN LICENSE BLOCK Version: MPL 1.1
 * 
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * The Original Code is the OpenCustomer CRM.
 * 
 * The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
 * Software-Ingenieurb黵o). Portions created by the Initial Developer are
 * Copyright (C) 2005 the Initial Developer. All Rights Reserved.
 * 
 * Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
 * 
 * ***** END LICENSE BLOCK *****
 */

package org.opencustomer.application.web.struts;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.tiles.TilesRequestProcessor;
import org.opencustomer.application.auth.AuthenticatorUtility;
import org.opencustomer.application.auth.Right;
import org.opencustomer.application.web.Globals;
import org.opencustomer.util.menu.Menu;
import org.opencustomer.web.util.SessionMonitor;

public class RequestProcessor extends TilesRequestProcessor
{
    private static final Logger log = Logger.getLogger(RequestProcessor.class);

    @Override
    protected boolean processRoles(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException
    {
        boolean access = false;
        boolean loggedIn = false;

        if (log.isDebugEnabled())
            log.debug("authenticate against authenticator");

        if (request.getSession().getAttribute(Globals.AUTHENTICATOR_KEY) != null)
            loggedIn = true;

        Right[] rights = new Right[mapping.getRoleNames().length];

        for (int i = 0; i < mapping.getRoleNames().length; i++)
        {
            try
            {
                rights[i] = Right.parseRight(mapping.getRoleNames()[i].trim());
            }
            catch (IllegalArgumentException e)
            {
                log.warn("found invalid right for '" + mapping.getPath() + "' : " + mapping.getRoleNames()[i]);
            }
        }

        access = AuthenticatorUtility.getInstance().authenticate(request, rights);

        if (log.isDebugEnabled())
            log.debug("access granted for '" + mapping.getPath() + "' : " + access);

        if (!access)
        {
            String forwardURL = mapping.findForward("login").getPath();
            if (loggedIn)
                forwardURL = mapping.findForward("error").getPath();

            ActionMessages errors = new ActionMessages();
            if (loggedIn)
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("common.error.missingRight"));
            else
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("common.error.notLoggedIn"));
            request.setAttribute(org.apache.struts.Globals.ERROR_KEY, errors);

            RequestDispatcher dispatcher = request.getRequestDispatcher(forwardURL);
            try
            {
                dispatcher.forward(request, response);
            }
            catch (ServletException e)
            {
                log.error("Could not forward to '" + forwardURL + "'", e);
            }
            catch (IOException e)
            {
                log.error("Generating internal forward failed to '" + forwardURL + "'", e);
            }
        }
        else
        {
            // setzte Menu
            Menu menu = (Menu) request.getSession().getAttribute(Globals.MENU_KEY);
            if (menu != null)
                menu.activate(mapping.getPath());
        }

        SessionMonitor monitor = (SessionMonitor) request.getSession().getAttribute(Globals.SESSION_MONITOR_KEY);
        if (monitor != null)
            monitor.setLastAccess(System.currentTimeMillis());

        return access;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?