skinutils.java

来自「Jive 是一个系统工程」· Java 代码 · 共 822 行 · 第 1/3 页

JAVA
822
字号
/** * $RCSfile: SkinUtils.java,v $ * $Revision: 1.8 $ * $Date: 2000/12/21 17:47:31 $ * * Copyright (C) 2000 CoolServlets.com. All rights reserved. * * =================================================================== * The Apache Software License, Version 1.1 * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by *        CoolServlets.com (http://www.coolservlets.com)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Jive" and "CoolServlets.com" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please *    contact webmaster@coolservlets.com. * * 5. Products derived from this software may not be called "Jive", *    nor may "Jive" appear in their name, without prior written *    permission of CoolServlets.com. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 COOLSERVLETS.COM OR * ITS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of CoolServlets.com. For more information * on CoolServlets.com, please see <http://www.coolservlets.com>. */package com.coolservlets.forum.util;import java.util.Date;import java.util.Iterator;import java.text.SimpleDateFormat;import java.io.File;import javax.servlet.*;import javax.servlet.http.*;import com.coolservlets.forum.*;import com.coolservlets.util.StringUtils;/** * A collection of utility methods for use in Jive WebSkins. Because these * methods make skin development much easier, skin authors should study them * carefully.<p> * * Three major areas of funtionality are provided:<p><ol> *      <li> Methods that simplify Authorization tasks: *          <ul> *              <li>{@link #getUserAuthorization(HttpServletRequest, HttpServletResponse)} *              <li>{@link #getUserAuthorization(HttpServletRequest, HttpServletResponse, boolean)} *              <li>{@link #setUserAuthorization(HttpServletRequest, HttpServletResponse, String, String, boolean)} *              <li>{@link #removeUserAuthorization(HttpServletRequest, HttpServletResponse)} *              <li>{@link #isSystemAdmin(Authorization)} *              <li>{@link #isForumAdmin(Authorization)} *              <li>{@link #isForumAdmin(Authorization, Forum)} *              <li>{@link #isGroupAdmin(Authorization)} *              <li>{@link #isGroupAdmin(Authorization, Group)} *          </ul> *          <p> *      <li> Methods that get and set Session and cookie values. *          <ul> *              <li>{@link #getCookie(HttpServletRequest, String)} *              <li>{@link #getCookieValue(HttpServletRequest, String)} *              <li>{@link #invalidateCookie(HttpServletRequest, HttpServletResponse, String)} *              <li>{@link #remove(HttpServletRequest, HttpServletResponse, String)} *              <li>{@link #retrieve(HttpServletRequest, HttpServletResponse, String)} *              <li>{@link #retrieve(HttpServletRequest, HttpServletResponse, String, boolean)} *              <li>{@link #store(HttpServletRequest, HttpServletResponse, String, String)} *              <li>{@link #store(HttpServletRequest, HttpServletResponse, String, String, int)} *              <li>{@link #store(HttpServletRequest, HttpServletResponse, String, String, int boolean)} *          </ul> *          <p> *      <li> Other methods. *          <ul> *              <li>{@link #dateToText(Date)} *              <li>(@link #getLastVisisted(HttpServletRequest, HttpServletResponse)} *              <li>(@link #getLastVisisted(HttpServletRequest, HttpServletResponse, boolean)} *              <li>{@link #isNewMessage(ForumMessage, long)} *              <li>(@link #quoteOriginal(ForumMessage, String, int)} *          </ul> * </ol> * * All methods conform to the Servlet 1.1 and JSP 1.0 specs for maximum * compatibility with application servers. This may yield deprecation warnings * if you compile with a newer Servlet/JSP spec; these should be ignored. This * class will periodically be updated to the newer specs as app servers mature. */public class SkinUtils {    /** Name of the authentication token (is stored in the user's session) */    public static final String JIVE_AUTH_TOKEN = "jiveAuthorization";    /** Name of the cookie used to store user info for auto-login purposes */    public static final String JIVE_AUTOLOGIN_COOKIE = "jiveAutoLogin";    /** Name of the last visited token (is stored in the user's session) */    public static final String JIVE_LASTVISITED_TOKEN = "jiveLastVisited";    /** Name of the cookie used to store last visited timestamp */    public static final String JIVE_LASTVISITED_COOKIE = "jiveLastVisited";    // XXX keep this????????    /** Name of the "use last visited" property (is stored in jive.properties) */    public static final String JIVE_LASTVISITED_PROP = "Site.useLastVisited";    //Time constants (in milliseconds)    private static final long SECOND = 1000;    private static final long MINUTE = 60 * SECOND;    private static final long HOUR   = 60 * MINUTE;    private static final long DAY    = 24 * HOUR;    private static final long WEEK   = 7 * DAY;    //Default cookie time to live (in seconds).    private static final int MAX_COOKIE_AGE = (int)(WEEK / 1000) * 8;    //Days of the week    private static final String[] DAYS_OF_WEEK =        { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };    // SimpleDateFormat objects for use in the dateToText method    private static final SimpleDateFormat dateFormatter =        new SimpleDateFormat("EEEE, MMM d 'at' h:mm a");    private static final SimpleDateFormat yesterdayFormatter =        new SimpleDateFormat("'Yesterday at' h:mm a");    //"Tweakable" parameters for the cookie encoding. NOTE: changing these    //and recompiling this class will essentially invalidate old cookies.    private final static int    ENCODE_XORMASK = 0x5A;    private final static char	ENCODE_DELIMETER = '\002';    private final static char	ENCODE_CHAR_OFFSET1 = 'A';    private final static char	ENCODE_CHAR_OFFSET2 = 'h';    /**     * Returns an Authorization token for the user. The following steps are     * performed to determine the token:<ol>     *     * <li>Check the session for the existence of a Jive authorization token.     *     If one is found, it is returned as we assume that the user has logged     *     in and is authorized.     * <li>Check the Jive authorization cookie for a username and password. If found,     *     attempt to create a Jive authorization token using that data. If     *     successful, save the token to the session and return it.     *     NOTE: This check can be skipped by setting     *     <code>checkJiveCookie</code> to false.     * </ol><p>     *     * @param request the HttpServletRequest object, known as "request" in a     *      JSP page.     * @param response the HttpServletResponse object, known as "response" in     *      a JSP page.     * @param checkJiveCookie a boolean that indicates whether or not we want     *      to use a cookie for authorization.     * @return the authorization token if authenticated, otherwise     *      <code>null</code>.     * @see Authorization     */    public static Authorization getUserAuthorization(HttpServletRequest request,            HttpServletResponse response, boolean checkJiveCookie)    {        // we can get the session object from the request object:        HttpSession session = request.getSession();        // Check 1: check for the jive authentication token in the user's session.        Authorization authToken = (Authorization)session.getValue(JIVE_AUTH_TOKEN);        if (authToken != null) {            return authToken;        }        // Check 2: check the jive cookie for username and password, if we're allowing that        if( checkJiveCookie ) {            Cookie cookie = getCookie(request, JIVE_AUTOLOGIN_COOKIE);            try {                if( cookie != null ) {                    // at this point, we found a cookie so grab the username & password                    // from it, create an authorization token and store that in the session                    String[] values = decodePasswordCookie(cookie.getValue());                    String username = values[0];                    String password = values[1];                    // try to validate the user based on the info from the cookie                    authToken = AuthorizationFactory.getAuthorization(username,password);                    // put that token in the user's session:                    session.putValue( JIVE_AUTH_TOKEN, authToken );                    // return the authorization token                    return authToken;                }            }            catch( Exception e ) {                //We want any exceptions in this block to be caught so that an                //anonymous authorization token can be returned. The                //getAuthorzation(username,password) method above throws an                //UnauthorizedException. In the case of this exception or others,                //the cookie holds invalid login info, so we should remove it:                cookie = new Cookie(JIVE_AUTOLOGIN_COOKIE,null);                cookie.setMaxAge(0); // zero value causes cookie to be deleted                response.addCookie(cookie);            }        }        //Got this far, so return null.        return null;    }    /**     * Returns an Authorization token for the user. This is a convenience method     * that that calls the other getUserAuthorization method with     * <code>checkJiveCookie</code set to true.     *     * @param request the HttpServletRequest object, known as "request" in a     *      JSP page.     * @param response The HttpServletResponse object, known as "response" in     *      a JSP page.     * @return The authorization token if authenticated, otherwise     *      <code>null</code>.     * @see SkinUtils#getUserAuthorization(HttpServletRequest,HttpServletResponse,boolean)     */    public static Authorization getUserAuthorization            ( HttpServletRequest request, HttpServletResponse response )    {        return getUserAuthorization(request, response, true);    }    /**     * Validates the user and optionally enables auto-login by creating an     * auto-login cookie.     *     * @param request the HttpServletRequest object, known as "request" in a JSP page.     * @param response the HttpServletResponse object, known as "response" in a JSP page.     * @param username the username.     * @param password the password.     * @param autoLogin if <code>true</code> create a cookie that enables auto-login.     * @throws UserNotFoundException     * @throws UnauthorizedException     */    public static Authorization setUserAuthorization(HttpServletRequest request,            HttpServletResponse response, String username, String password,            boolean autoLogin) throws UserNotFoundException, UnauthorizedException    {        HttpSession session = request.getSession();        Authorization authToken = AuthorizationFactory.getAuthorization(username, password);        session.putValue(JIVE_AUTH_TOKEN, authToken);        if (autoLogin) {

⌨️ 快捷键说明

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