`
annan211
  • 浏览: 463007 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java web系统 cookie 管理

    博客分类:
  • java
 
阅读更多
第一步  写一个cookieUtil工具类


package com.gdiex.sts.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

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


/**
 * Cookie操作类
 * 
 * @author 
 */
public class CookieUtil {
	
	private HttpServletRequest request;
	
	private HttpServletResponse response;
	
	private String path = "/"; // 默认路径
	
	private String domain = ".zzzzzz.com"; // 域
	
	private int maxAge = 0; // 最大有效期

	public CookieUtil(HttpServletRequest request, HttpServletResponse response) {
		this.request = request;
		this.response = response;
	}

	/**
	 * @param name
	 * @return
	 */
	public Cookie getCookie(String name) {
		Cookie[] cookies = request.getCookies();
		
		if (cookies != null) {
			for (int i = 0; i < cookies.length; i++) {
				//System.out.println(cookies[i].getName()+":"+cookies[i].getValue());
				if (name.equals(cookies[i].getName())) {
					return cookies[i];
				}
			}
		}
		return null;
	}

	/**
	 * 删除cookie
	 * 
	 * @param name
	 */
	public void deleteCookie(String name) {
		//setCookie(name, "", -1);
		setCookie(name, "", 0);
	}

	/**
	 * @param name
	 * @param value
	 */
	public void setCookie(String name, String value) {
		setCookie(name, value, maxAge);
	}

	/**
	 * 增加cookie
	 * 
	 * @param name
	 * @param value
	 * @param maxage
	 */
	public void setCookie(String name, String value, int cookieMaxAge) {
		setCookie(name, value, cookieMaxAge, path, domain);
	}

	/**
	 * 增加cookie
	 * 
	 * @param name
	 * @param value
	 * @param path
	 * @param domain
	 * @param cookieMaxAge
	 */
	public void setCookie(String name, String value, int cookieMaxAge, String path,
			String domain) {
		try {
			Cookie cookie = new Cookie(name, URLEncoder.encode(value, "UTF-8"));
			if (path != null) {
				cookie.setPath(path);
			}
			if (domain != null) {
				cookie.setDomain(domain);
			}
			if (cookieMaxAge != 0) {
				cookie.setMaxAge(cookieMaxAge);
			}
	
			response.addCookie(cookie);
		} catch (Exception e) {
			
		}
	}

	/**
	 * 得到COOKIE中的字符串
	 * 
	 * @param name
	 * @return
	 */
	public String getString(String name) {
		Cookie cookie = getCookie(name);
		if (cookie == null)
			return null;
		String value = cookie.getValue();
		if ("null".equals(value))
			return null;
		if (value != null) {
			try {
				value = URLDecoder.decode(value, "UTF-8");
			} catch (UnsupportedEncodingException e) {
			}
		}
		return value;
	}

	/**
	 * 返回整数型cookie值
	 * 
	 * @param name
	 * @return 异常返回-1
	 */
	public int getInt(String name) {
		return Integer.parseInt(getString(name)==null || "".equals(getString(name))?"-1":getString(name));
	}

	/**
	 * 返回浮点数cookie值
	 * 
	 * @param name
	 * @return 异常返回 -1.0d;
	 */
	public double getDouble(String name) {
		return Double.parseDouble(getString(name)==null || "".equals(getString(name))?"-1":getString(name));
	}
	
	/**
	 * 设置默认的PATH
	 * 
	 * @param path
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * 设置默认的DOMAIN
	 * 
	 * @param domain
	 */
	public void setDomain(String domain) {
		this.domain = domain;
	}

	/**
	 * 设置默认的MAX_AGE
	 * 
	 * @param age
	 */
	public void setMaxAge(int age) {
		this.maxAge = age;
	}

	public static void main(String[] args) {

	}
}



第二步  写一个 自定义类 校验

package com.gdiex.sts.util;

import java.net.URLDecoder;
import java.net.URLEncoder;

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

/**
 * 用户校验类
 *
 * @author 
 *
 */
public class FrontAuthencation {

	private CookieUtil cookieUtil = null;

	// added 

	public FrontAuthencation(HttpServletRequest request,
			HttpServletResponse response) {
		cookieUtil = new CookieUtil(request, response);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
	}

	/**
	 * 保存用户名到 cookie
	 *
	 * @param userId
	 *            - 用户ID
	 * @param userName
	 *            - 用户名
	 */
	public void saveUserName(int userId, String userName, String nickName) {
		if (null == userName) {
			userName = "";
		}
		userName = userName.trim();
		if (null == nickName) {
			nickName = "";
		}
		nickName = nickName.trim();
		String code = AuthencationHelper.getCode(userName, userId);
		cookieUtil.setCookie(SysopConstant.KEY_USER_NAME_FRONT, userName);
		cookieUtil.setCookie(SysopConstant.KEY_NICK_NAME_FRONT,
				URLEncoder.encode(nickName));
		cookieUtil.setCookie(SysopConstant.KEY_USER_ID_FRONT, "" + userId);
		cookieUtil.setCookie(SysopConstant.KEY_IDENTIFYING_CODE_FRONT, code);
	}

	/**
	 * 删除cookie会话数据
	 */
	public void clearCookie() {

		cookieUtil.setPath("/");
		cookieUtil.setMaxAge(0);

		cookieUtil.deleteCookie(SysopConstant.KEY_USER_NAME_FRONT);
		cookieUtil.deleteCookie(SysopConstant.KEY_NICK_NAME_FRONT);
		cookieUtil.deleteCookie(SysopConstant.KEY_USER_ID_FRONT);
		cookieUtil.deleteCookie(SysopConstant.KEY_IDENTIFYING_CODE_FRONT);
	}

	/**
	 * 保存需要强行检验的code
	 *
	 * @param code
	 */
	public void saveVerifyCode(String code) {
		cookieUtil.setCookie(SysopConstant.KEY_VERIFY_CODE, code);
	}

	/**
	 * 是否为合法用户
	 *
	 * @return
	 */
	public boolean isValidUser() {
		String userName = getUserName();
		int userId = getUserId();
													   //KEY_IDENTIFYING_CODE_FRONT
		String code = cookieUtil.getString(SysopConstant.KEY_IDENTIFYING_CODE_FRONT);
		if (code == null) {
			return false;
		}
		String idCode = AuthencationHelper.getCode(userName, userId);
		return (idCode.equals(code));
	}

	/**
	 * 获取是否第一次访问的标识
	 *
	 * @return
	 */
	public static String getFirstRequest(HttpServletRequest request,
			HttpServletResponse response) {
		// 需要配置为进程内的域名cookie
		CookieUtil cookie = new CookieUtil(request, response);
		String domain = request.getServerName();
		// 设置的域名不能带http协议与端口
		cookie.setDomain(domain);

		cookie.setPath("/");
		cookie.setMaxAge(-1);
		return cookie.getString(SysopConstant.FIRST_REQUEST);
	}

	/**
	 * 设置第一次访问的标识
	 */
	public static void setFirstRequest(HttpServletRequest request,
			HttpServletResponse response) {
		// 需要配置为进程内的域名cookie
		CookieUtil cookie = new CookieUtil(request, response);
		String domain = request.getServerName();
		// 设置的域名不能带http协议与端口
		cookie.setDomain(domain);

		cookie.setPath("/");
		// 设置了该值不会生效
		cookie.setMaxAge(-1);

		cookie.setCookie(SysopConstant.FIRST_REQUEST,
				SysopConstant.FIRST_REQUEST);
	}

	/**
	 * 标识需要清除菜单缓存
	 *
	 * @param request
	 * @param response
	 */
	public static void setClearMenu(HttpServletRequest request,
			HttpServletResponse response) {
		// 需要配置为进程内的域名cookie
		CookieUtil cookie = new CookieUtil(request, response);
		String domain = request.getServerName();
		// 设置的域名不能带http协议与端口
		cookie.setDomain(domain);

		cookie.setPath("/");
		// 设置了该值不会生效
		cookie.setMaxAge(-1);

		cookie.setCookie("clearMenu", "clearMenu");
	}

	/**
	 * 删除第一次访问设置的缓存
	 */
	public static void removeFirstRequest(HttpServletRequest request,
			HttpServletResponse response) {
		// 需要配置为进程内的域名cookie
		CookieUtil cookie = new CookieUtil(request, response);
		String domain = request.getServerName();
		// 设置的域名不能带http协议与端口
		cookie.setDomain(domain);

		cookie.setPath("/");
		cookie.setMaxAge(0);

		cookie.deleteCookie(SysopConstant.FIRST_REQUEST);
	}

	/**
	 * 获得用户名
	 *
	 * @return
	 */
	public String getUserName() {
		return cookieUtil.getString(SysopConstant.KEY_USER_NAME_FRONT);
	}

	/**
	 * 获得用户呢称
	 *
	 * @return
	 */
	public String getNickName() {
		return URLDecoder.decode(cookieUtil
				.getString(SysopConstant.KEY_NICK_NAME_FRONT));
	}

	/**
	 * 获得用户ID
	 *
	 * @return
	 */
	public int getUserId() {
		return cookieUtil.getInt(SysopConstant.KEY_USER_ID_FRONT);
	}

	/**
	 * 设置 cookie,浏览器进程有效
	 *
	 * @param name
	 *            - 名称
	 * @param value
	 *            - 值
	 */
	public void setCookie(String name, String value) {
		cookieUtil.setCookie(name, value);
	}
}




第三步  写一个 校验工具类

package com.gdiex.sts.util;

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

/**
 * 权限验证工具类
 * @author 
 *
 */
public class AuthencationHelper {

	/**
	 * 用于加密用户名的 key
	 */
	private static final String HASH_KEY = "$ILKLKOI*-UU&^%GKJ-2EOI-LKKP-JUJKJ9";
	
	/** 一年有多少秒 */
	public static final int YEAR_SECONDS = 365 * 24 * 3600;

	/**
	 * 保存用户名到 cookie
	 * @param response
	 * @param userName - 用户名
	 */
	public static void saveUserName(HttpServletResponse response, String userName, int userId) {
		if (userName == null) {
			throw new IllegalArgumentException("userName");
		}
		
		String code = getCode(userName, userId);
		CookieUtil cookieUtil = new CookieUtil(null, response);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		cookieUtil.setCookie(SysopConstant.KEY_USER_NAME, userName);
		cookieUtil.setCookie(SysopConstant.KEY_USER_ID, "" + userId);
		cookieUtil.setCookie(SysopConstant.KEY_IDENTIFYING_CODE, code);
		// 保存一个固定时间的 cookie
		cookieUtil.setCookie(SysopConstant.KEY_GLOBAL_USER_ID, "" + userId, AuthencationHelper.YEAR_SECONDS);

	}
	
	/**
	 * 是否为合法用户
	 * @param request
	 * @return true - 合法
	 */
	public static boolean isValidUser(HttpServletRequest request) {
		CookieUtil cookieUtil = new CookieUtil(request, null);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		String userName = cookieUtil.getString(SysopConstant.KEY_USER_NAME);
		if (userName == null) {
			return false;
		}
		
		int userId = cookieUtil.getInt(SysopConstant.KEY_USER_ID);
		
		String code = cookieUtil.getString(SysopConstant.KEY_IDENTIFYING_CODE);
		if (code == null) {
			return false;
		}
		String idCode = getCode(userName, userId);
		return (idCode.equals(code));
	}
	
	/**
	 * 获得用户名
	 * @param request
	 * @return
	 */
	public static String getUserName(HttpServletRequest request) {
		CookieUtil cookieUtil = new CookieUtil(request, null);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		return cookieUtil.getString(SysopConstant.KEY_USER_NAME);
	}
	
	/**
	 * 获得验证码
	 * @param request
	 * @return
	 */
	public static String getIdCode(HttpServletRequest request) {
		CookieUtil cookieUtil = new CookieUtil(request, null);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		return cookieUtil.getString(SysopConstant.KEY_IDENTIFYING_CODE);
	}
	
	/**
	 * 获得用户ID
	 * @param request
	 * @return
	 */
	public static int getUserId(HttpServletRequest request) {
		CookieUtil cookieUtil = new CookieUtil(request, null);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		return cookieUtil.getInt(SysopConstant.KEY_USER_ID);
	}
	
	/**
	 * 返回一个加密后的字符串
	 * @param userName
	 * @param userId
	 * @return
	 */
	public static String getCode(String userName, int userId) {
		return EncryptUtil.getSHA1(userName + "|" + userId + HASH_KEY);
	}
	
	/**
	 * 删除所有cookie
	 * @param request
	 */
	public static void clearAllCookie(HttpServletRequest request,HttpServletResponse response) {
		CookieUtil cookieUtil = new CookieUtil(request, response);
		cookieUtil.setDomain(SysopConstant.SYSTEM_DOMAIN);
		cookieUtil.setPath("/");
		cookieUtil.deleteCookie(SysopConstant.KEY_USER_NAME);
		cookieUtil.deleteCookie(SysopConstant.KEY_USER_ID);
		cookieUtil.deleteCookie(SysopConstant.KEY_IDENTIFYING_CODE);
		cookieUtil.deleteCookie(SysopConstant.FIRST_REQUEST);
	}
}



第四步  直接调用即可

FrontAuthencation auth = new FrontAuthencation(request, response);
// 保存用户信息到cookie
			auth.saveUserName(1, PropertyUtils.getProperty(bean, "object.body.userCode").toString(), "");

简单的思路就是  HttpServletRequest 把请求来的数据 放在指定的域名的cookie下面,以键值对的形式保存,下次需要使用的时候 根据键拿出来校验,通常写在拦截器里面,执行操作之前 先检查用户合法性。


分享到:
评论

相关推荐

    基于java web的超市管理系统(包含源文件)

    【基于Java Web的超市管理系统】是一个综合性的应用项目,它利用了Java Web技术来实现对小型超市日常运营的数字化管理。这个系统的核心功能是管理用户会员、供应商以及账单等关键信息,支持基本的增删改查操作,从而...

    Java web程序下的图书管理系统源代码

    【Java Web图书管理系统源代码详解】 Java Web技术是开发基于Web的应用程序的一种强大工具,尤其在构建企业级应用中有着广泛的应用。这个“图书管理系统”是利用Java Web技术实现的一个典型示例,它包含了数据库的...

    基于Java web的学生管理系统(源码+数据库).zip

    【Java Web学生管理系统详解】 Java Web技术是一种广泛应用于构建企业级Web应用的开发平台,它结合了Java语言的强大功能和Web应用的灵活性。本项目基于Java Web的学生管理系统提供了一个简单的实例,适合初学者进行...

    课程设计-基于Java web的驾校学员管理系统(源码+数据库).zip

    这是一个基于Java Web技术的驾校学员管理系统,用于课程设计目的,包含源码和数据库配置文件。系统的核心功能包括学籍管理、体检管理、成绩管理和驾照管理,涵盖了驾校日常运营中的主要环节。 首先,从技术栈来看,...

    java web投票系统

    数据库管理系统通常是存储投票记录的关键组件,可能会使用如MySQL这样的关系型数据库来存储用户投票信息。此外,会话管理也是必不可少的,以确保用户只能投一次票,防止重复投票。这可能通过使用HTTP Session或者...

    基于Java web的新闻管理系统(源码+数据库).zip

    【Java Web新闻管理系统】是一个基于Java企业版(Java EE)技术构建的应用,旨在提供一个集新闻发布、管理、检索于一体的在线平台。这个项目的核心在于利用Web技术与数据库交互,实现新闻数据的存储、更新和展示。...

    java web cookie 详解 java web cookie 详解

    java web cookie 详解

    java web 图书管理系统

    【Java Web 图书管理系统】是一种基于Java技术的Web应用程序,旨在提供一个全面的图书管理解决方案。这个系统通常包括用户界面、后端数据库以及中间层服务,用于处理图书的添加、查询、借阅、归还等一系列操作。对于...

    java web 网上商城,简单的后台管理商品

    8. **Session/Cookie管理**:用于跟踪用户购物车状态和登录信息。 9. **安全性**:可能涉及到HTTPS、CSRF令牌、XSS防护等安全措施。 10. **Tomcat服务器**:作为Java Web应用的部署环境。 11. **版本控制**:如Git,...

    Java web 交友网站

    这个项目的核心是使用Java Web技术栈来构建一个功能完善的交友系统,其中包括用户注册、登录、个人信息管理、好友查找与添加、消息交互等功能。通过分析这个项目的源代码,我们可以深入理解Java Web开发的基本流程和...

    Java教材管理系统

    通过学习和分析这个Java教材管理系统,开发者可以掌握完整的Web应用开发流程,从需求分析到设计、编码、测试和上线。同时,对于理解Java企业级应用的架构设计、数据库管理和Web交互机制等方面,都有极大的帮助。对于...

    留言板java web系统

    2. Session和Cookie管理:用于跟踪用户状态,如登录状态,通过Session存储用户信息,Cookie则可以设置用户的一些偏好。 四、前端界面 前端界面通常由HTML、CSS和JavaScript组成。HTML定义页面结构,CSS控制样式,...

    关于java应用cookie

    ### 关于Java应用Cookie知识点详解 #### 一、Cookie简介 Cookie是一种常用的技术,用于存储用户的访问信息。在Web开发中,服务器可以将少量的信息发送到客户端浏览器,并存储在客户端,这种信息就是Cookie。当...

    java web电子商务管理系统.rar

    《Java Web电子商务管理系统详解》 Java Web技术在电子商务领域的应用广泛且深入,它以其稳定、高效和可扩展性成为构建大型商务系统的重要选择。本文将围绕"java web电子商务管理系统.rar"这一主题,深入探讨其中...

    java web课程设计 机房管理系统

    【Java Web课程设计:机房管理系统】 在Java Web开发领域,课程设计往往旨在让学生实践理论知识,提升实际操作技能。本机房管理系统就是一个典型的例子,它涵盖了多种关键技术和概念,对于学习者来说具有很高的学习...

    基于Java web的书店系统

    总结来说,"基于Java web的书店系统"是一个综合性的项目,涵盖了Web开发的多个方面,包括前端交互、后端服务、数据库设计、用户管理、支付集成等,对学习和提升Java Web开发技能非常有帮助。通过实践这个项目,...

    Java 模拟cookie登陆简单操作示例

    Cookie 是一种小型文本文件,用于存储 Web 应用程序的状态信息。当用户访问某个网站时,该网站可能会将 Cookie 信息写入到用户的浏览器中,以便下次用户访问该网站时能够快速识别用户的身份。 为什么需要模拟 ...

    【Java web实战员工管理系统】第十一讲.zip

    在本节"【Java web实战员工管理系统】第十一讲"中,我们将深入探讨如何利用Java Web技术构建一个功能完备的员工管理系统。这个系统的核心目标是实现对企业内部员工信息的有效管理和操作,包括添加、删除、修改和查询...

    Java Web BBS论坛系统

    Java Web BBS论坛系统是一种基于Java技术构建的网络交流平台,它允许用户进行在线讨论、分享信息和资源,是Web应用程序的一种典型应用。这个系统通常包括用户注册与登录、主题发布、帖子回复、搜索功能、用户管理等...

Global site tag (gtag.js) - Google Analytics