j2ee中实现cookie的自动登录

7 篇文章 0 订阅
6 篇文章 0 订阅
.


1.用到的常量

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.过滤器

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中是否有对应的邮箱和密码<BR>
* 如果有那么就查出该user放进session中<BR>
* 如果都没有那么就doFilter()<BR>
*
* @author ocaicai@yeah.net<BR>
* @date 2011-9-22<BR>
* @version 1.0 <BR>
*
*/
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 != null && password != null && email.length() > 0
&& password.length() > 0) {
cookieUser = new User();
cookieUser.setEmail(email);
cookieUser.setPassword(password);

// System.out.println("email=" + cookieUser.getEmail());
// System.out.println("password="
// + cookieUser.getPassword());

IUserService userService = PicoContainer.PICO
.getComponent(IUserService.class);
cookieUser = userService.validLogin(cookieUser);

if (cookieUser != null) {
// 将该user放入到session中
request.getSession().setAttribute(
CommonConstants.SESSION_USER, cookieUser);
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}

} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}

}



3.web.xml配置cookie登录过滤器


<!-- cookie邮箱和密码登陆过滤 -->
<filter>
<filter-name>cookie-login-filter</filter-name>
<filter-class>com.hydom.filter.CookieLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cookie-login-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


4.用户登录时


public class LoginAction extends BaseAction {
private static final long serialVersionUID = 1L;
private String email = null;// 用户邮箱
private String password = null;// 用户密码
private boolean autoLoginStatus = false;

public boolean getAutoLoginStatus() {
return autoLoginStatus;
}

public void setAutoLoginStatus(boolean autoLoginStatus) {
this.autoLoginStatus = autoLoginStatus;
}

public void setEmail(String email) {
this.email = email;
}

public void setPassword(String password) {
this.password = password;
}

// 获取数据层示例
private IUserService userService = PicoContainer.PICO
.getComponent(IUserService.class);
@Override
public String execute() throws Exception {
try {
// 验证用户信息
String message = checkAndFilterUsersInfo();
;
User user = null;
if (message == null) {
user = new User();
user.setEmail(this.email);
user.setPassword(this.password);
user = userService.validLogin(user);
}

// 输出结果
StringBuilder msg = new StringBuilder();
msg.append("{");
if (user != null) {
super.getSession().setAttribute(CommonConstants.SESSION_USER,
user);
msg.append("msg:'success'").append(",");
msg.append("userName:'").append(user.getUserName()).append("'");

if (autoLoginStatus) {
// 根据选择状态判断是否将用户邮箱和密码信息保存在客户端浏览器
addCookieingUserToResponse(user);
}else{
removeCookieingUserInResponse();
}

} else {
if (message == null) {
msg.append("msg:'帳號或者密碼錯誤'");
} else {
msg.append("msg:'").append(message).append("'");
}
}

msg.append("}");
ajaxJson(msg.toString());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 将用户邮箱和密码信息添加到响应中
*
* @param cookieingUser
*/
private void addCookieingUserToResponse(User cookieingUser) {

// 设置cookie邮箱名值对
Cookie cookieEmail = new Cookie(CommonConstants.BROWSER_COOKIE_EMAIL,
cookieingUser.getEmail());
cookieEmail.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
cookieEmail.setPath(super.getRequest().getContextPath());
super.getResponse().addCookie(cookieEmail);

// 设置cookie密码名值对
Cookie cookiePassword = new Cookie(
CommonConstants.BROWSER_COOKIE_PASSWORD, cookieingUser
.getPassword());
cookiePassword.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
cookiePassword.setPath(super.getRequest().getContextPath());
super.getResponse().addCookie(cookiePassword);


// 设置cookie自动登录状态名值对
Cookie autoLoginStatusCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_AUTO_STATUS_NAME,
"1");
autoLoginStatusCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
autoLoginStatusCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(autoLoginStatusCookie);

// 设置cookie登出名值对
Cookie loginOutCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_LOGIN_OUT_NAME,
"0");
loginOutCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
loginOutCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(loginOutCookie);
}

public void removeCookieingUserInResponse(){
// 设置cookie邮箱名值对
Cookie cookieEmail = new Cookie(CommonConstants.BROWSER_COOKIE_EMAIL,
null);
cookieEmail.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
cookieEmail.setPath(super.getRequest().getContextPath());
super.getResponse().addCookie(cookieEmail);

// 设置cookie密码名值对
Cookie cookiePassword = new Cookie(
CommonConstants.BROWSER_COOKIE_PASSWORD, null);
cookiePassword.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
cookiePassword.setPath(super.getRequest().getContextPath());
super.getResponse().addCookie(cookiePassword);


// 设置cookie自动登录状态名值对
Cookie autoLoginStatusCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_AUTO_STATUS_NAME,
"0");
autoLoginStatusCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
autoLoginStatusCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(autoLoginStatusCookie);

// 设置cookie登出名值对
Cookie loginOutCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_LOGIN_OUT_NAME,
"0");
loginOutCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
loginOutCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(loginOutCookie);
}
}


5.退出


public class LogOutAction extends BaseAction {
private static final long serialVersionUID = 1L;

// 用户登出
@Override
public String execute() throws Exception {
super.getSession().removeAttribute(CommonConstants.SESSION_USER);

// 设置cookie登出名值对
Cookie loginOutCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_LOGIN_OUT_NAME,
"1");
loginOutCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
loginOutCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(loginOutCookie);

// 设置cookie自动登录状态名值对
Cookie autoLoginStatusCookie = new Cookie(
CommonConstants.BROWSER_COOKIE_AUTO_STATUS_NAME,
"0");
autoLoginStatusCookie
.setMaxAge(CommonConstants.BROWSER_COOKIE_MAX_AGE);
autoLoginStatusCookie.setPath(super.getRequest()
.getContextPath());
super.getResponse().addCookie(autoLoginStatusCookie);

PrintWriter out = super.getResponse().getWriter();
out.close();
return null;
}

}


6.jsp登录页面


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script src="<%=base%>js/common/jquery.js"></script>
<script src="<%=base%>js/common/jquery.cookie.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var email=$.cookie('<%=CommonConstants.BROWSER_COOKIE_EMAIL%>');
var password=$.cookie('<%=CommonConstants.BROWSER_COOKIE_PASSWORD%>');
var autoStatus=$.cookie('<%=CommonConstants.BROWSER_COOKIE_AUTO_STATUS_NAME%>');
var loginOut=$.cookie('<%=CommonConstants.BROWSER_COOKIE_LOGIN_OUT_NAME%>');

if(autoStatus=="0"&&loginOut=="1"){
$("#newemail").attr("value",email.replace(new RegExp('"',"gm"),""));
$("#newpassword").attr("value",password.replace(new RegExp('"',"gm"),""));
}

});
</script>

<div class="hidden" id="smallLay">
<span><a href="javascript:closedialog()" onFocus="this.blur()" > <img src="<%=base%>images/cose.gif" /></a></span>
<p class="logo"><img onerror="this.src='<%=base%>images/logo.jpg'" src="<%=base%><%=logo.getSmallPath()%>" /></p>
<div class="user">
<ul>
<li><b>郵箱:</b><input type="text" id="newemail" onblur="checkAdminEmail(this.value)" value=""/></li>
<li><b>密碼:</b><input type="password" id="newpassword" value=""/></li>
</ul>
<samp><input name="autoLoginStatus" id="autoLoginStatus" checked="checked" type="checkbox" value="" class="check"/><d>下次自動登陸</d> <a href="javascript:startRegister()" style="color:red;text-decoration: underline;"">忘記密碼</a></samp>
<p><input type="button" class="land" onclick="gologin()" value="登 录"/></p>
<samp><b>使用合作網站帳號登陸:</b><img src="<%=base%>images/f.gif" onclick="tofacelogin()"/><u></u><img src="<%=base%>images/sina.gif" /></samp>
</div>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值