j2ee中实现cookie的自动登录(一)

2014-11-24 02:57:38 · 作者: · 浏览: 0

1.用到的常量
Java代码
package com.hydom.util;

public final class CommonConstants {

// 系统 session 用户
public final static String SESSION_USER = "session_user";

/** 保存在浏览器中cookie的邮箱名称名 */
public final static String BROWSER_COOKIE_EMAIL = "HKPhotoUserEmail";

/** 保存在浏览器中cookie的邮箱密码名 */
public final static String BROWSER_COOKIE_PASSWORD = "HKPhotoUserPassword";

/** 保存在浏览器中cookie的最大时间15天 */
public final static int BROWSER_COOKIE_MAX_AGE = 15*24*60*60;

/** 保存在浏览器中cookie的自动登录状态名 */
public final static String BROWSER_COOKIE_AUTO_STATUS_NAME = "HKPhotoAutoLoginStatus";

/** 保存在浏览器中cookie的退出登录名 */
public final static String BROWSER_COOKIE_LOGIN_OUT_NAME = "HKPhotoLoginOut";
}


2.过滤器
Java代码
package com.hydom.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hydom.entity.User;
import com.hydom.service.IUserService;
import com.hydom.util.CommonConstants;
import com.hydom.util.pico.PicoContainer;

/**
*功能:首先检测session中是否有user,如果没有再检测cookie中是否有对应的邮箱和密码

* 如果有那么就查出该user放进session中

* 如果都没有那么就doFilter()

*
* @author ocaicai@yeah.net

>
* @date 2011-9-22

* @version 1.0

*
*/
public class CookieLoginFilter extends BaseFilter {
// 获取数据层示例

@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

Object object = request.getSession().getAttribute(
CommonConstants.SESSION_USER);

User cookieUser = null;
String email = null;
String password = null;
String autoStatus = null;

if (object == null) {
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
// System.out.println("cookies.length=" + cookies.length);
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];

// 判断Cookie的邮箱名是否等于"HKPhotoUserEmail"
if (CommonConstants.BROWSER_COOKIE_EMAIL.equals(cookie
.getName())) {
email = cookie.getValue().trim();
}

// 判断Cookie的密码名是否等于"HKPhotoUserPassword"
if (CommonConstants.BROWSER_COOKIE_PASSWORD.equals(cookie
.getName())) {
password = cookie.getValue().trim();
}

// 判断Cookie的自动登录状态名是否等于"HKPhotoAutoLoginStatus"
if (CommonConstants.BROWSER_COOKIE_AUTO_STATUS_NAME
.equals(cookie.getName())) {
autoStatus = cookie.getValue().trim();
}
}
if (autoStatus!=null&&autoStatus.equals("1")) {
if (email != nu