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);
}
}
}
分享到:
相关推荐
Spring文件资源操作和Web相关工具类盘点
Spring不但提供了一个...第1部分将介绍与文件资源操作和Web相关的工具类。在第2部分中将介绍特殊字符转义和方法入参检测工具类。文件资源操作文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...
包含FTP、邮件、pdf、csv、xml、图片、图形、条形码、序列化、压缩解压、分词、汉字转拼音、时间操作、万能数据转换、网络、文件操作、弹窗、正则、字符串操作、web验证码、水印缩略图、缓存相关等等50余个工具类,...
操作系统的桌面处理javaweb相关工具类1,一部分,2部分在另外一个文档中
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...
可视化Web开发工具由Visual Web Developer开发环境, WebFramework运行环境 2大部分组成, Visual Web Developer是基于Windows的一个开发工具,提供了一系列控件, 让您的模块实现只需要通过拖沓控件,指定控件的...
每个程序员都应该有一套自己的工具类,这个工具类提供很全的java文件操作方法
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...
vue 字符和日期转换工具类,先将util里面的公共对象抛出,全局使用
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
ICEpdf是一种开源,轻量级的pdf 引擎,用于展示/查看PDF文档,转换和抽取PDF文档的内容,还可以集成到Java桌面应用程序或Web服务器中使用。itextpdf用于itext库创建pdf文件。
可以参考】 使用封装的思想,极尽...专门的数据库操作工具类(加载注册驱动、获取连接对象、获取语句对象、执行语句、释放资源)、多条件查询公共类(获取条件语句、获取查询请求参数)、web基础servlet+jsp 页面跳转
我所知道的解决方案有用命令行的调用的,操作麻烦,总之还是很难用啦,还有就是开发web端管理工具,kettle自带了一个web端管理工具,界面极其简陋不说,还很难用,基本无法投入生产环境使用,其他没留意到还有没有较...
实现一个类似QQ的网络聊天软件的功能;服务端采用WebServices提供技术支持,...服务端采用两层结构,即DAL和BLL,数据访问层使用LINQ to SQL类来实现,大大简化该层的设计工作量;业务逻辑层使用LINQ来操作数据对象;