免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > j2ee中实现cookie的自动登录

j2ee中实现cookie的自动登录

时间:2011-10-18 23:24来源: 整理:寂涯网络 点击:

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中是否有对应的邮箱和密码<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登录过滤器

Xml代码 
<!-- 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.用户登录时

Java代码 
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.退出

Java代码 
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登录页面

Html代码 
<%@ 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>  

作者“成功需要沉寂时间来练功”

本页地址 http://www.jybase.net/biancheng/20111018163.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com