Web操作工具类

package com.zhangsx.util.web;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Web相关的工具方法。
 * 提供获取用户的实际IP地址、获取请求中指定名称的Cookie、失效掉指定名称的Cookie。
 * 
 * @version 1.00 2010-1-15
 * @since 1.5
 * @author ZhangShixi
 */
public class WebUtil {

    /**
     * 获取实际用户的ip访问地址。
     * @param request Http请求。
     * @return 客户端ip地址。
     */
    public static String getIpAddress(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        
        String ips = request.getHeader("x-forwarded-for");
        if (ips == null || ips.isEmpty() || "unknown".equalsIgnoreCase(ips)) {
            ips = request.getHeader("Proxy-Client-IP");
        }
        if (ips == null || ips.isEmpty() || "unknown".equalsIgnoreCase(ips)) {
            ips = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ips == null || ips.isEmpty() || "unknown".equalsIgnoreCase(ips)) {
            ips = request.getRemoteAddr();
        }

        String[] ipArray = ips.split(",");
        String clientIp = null;
        for (String ip : ipArray) {
            if (!"unknown".equalsIgnoreCase(ip)) {
                clientIp = ip;
                break;
            }
        }

        return clientIp;
    }

    /**
     * 获取请求中指定的名称的Cookie。
     * @param request Http请求。
     * @param name cookie名称。
     * @return 如果请求中有相应名称的Cookie,则返回相应的Cookie实例;否则返回null。
     */
    public static Cookie getCookie(HttpServletRequest request, String name) {
        if (request == null || name == null || name.isEmpty()) {
            return null;
        }

        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                if (cookie != null && name.equals(cookie.getName())) {
                    return cookie;
                }
            }
        }
        return null;
    }

    /**
     * 失效掉指定名称的Cookie。
     * @param request 请求。
     * @param response 相应。
     * @param name cookie名称。
     */
    public static void invalidCookie(
            HttpServletRequest request,HttpServletResponse response, String name) {
        if (request == null || response == null || name == null || name.isEmpty()) {
            return;
        }

        Cookie cookie = getCookie(request, name);
        if (cookie != null) {
            cookie.setMaxAge(0);
            cookie.setPath(request.getContextPath());
            response.addCookie(cookie);
        }
    }
}
 

你可能感兴趣的:(Web,servlet)