org.beangle.web.util.RequestUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.beangle.web.util.RequestUtils.java

Source

/* Copyright c 2005-2012.
 * Licensed under GNU  LESSER General Public License, Version 3.
 * http://www.gnu.org/licenses
 */
package org.beangle.web.util;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.codec.net.BCodec;
import org.apache.commons.lang.StringUtils;
import org.beangle.web.agent.Browser;
import org.beangle.web.agent.Os;
import org.beangle.web.agent.Useragent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class RequestUtils {

    private static final Logger logger = LoggerFactory.getLogger(RequestUtils.class);

    private RequestUtils() {
    }

    /**
     * ?IP
     * 
     * @param request
     * @return
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

    /**
     * ?action.do<br>
     * http://localhost/myapp/dd.do /dd.do<br>
     * http://localhost/myapp/dir/to/dd.do /dir/to/dd.do
     * 
     * @return
     */
    public static String getServletPath(HttpServletRequest request) {
        String servletPath = request.getServletPath();
        if (StringUtils.isNotEmpty(servletPath)) {
            return servletPath;
        } else {
            String uri = request.getRequestURI();
            if (uri.length() == 1)
                return "";
            int start = uri.indexOf('/', 1);
            return servletPath = uri.substring(-1 == start ? 0 : start);
        }
    }

    public static String encodeAttachName(HttpServletRequest request, String attach_name) {
        String agent = request.getHeader("USER-AGENT");
        String newName = attach_name;
        try {
            if (null != agent && -1 != agent.indexOf("MSIE")) {
                newName = URLEncoder.encode(attach_name, "UTF-8");
            } else {
                newName = new BCodec("UTF-8").encode(attach_name);
            }
        } catch (Exception e) {
            logger.error("cannot encode " + attach_name, e);
            return attach_name;
        }
        return newName;
    }

    /**
     * @param request
     * @return
     */
    public static Useragent getUserAgent(HttpServletRequest request) {
        String head = request.getHeader("USER-AGENT");
        return new Useragent(getIpAddr(request), Browser.parse(head), Os.parse(head));
    }
}