SSH:在网页中添加记住密码的功能

来源:互联网 发布:非典真实死亡人数知乎 编辑:程序博客网 时间:2024/06/18 18:50

记住密码的功能想必大家都有用过,这次我来讲的在java的web编程中如何实现这个功能

首先你当然需要在你的网页中添加一个复选框来给用户使用是否要记住他的登录密码,这个功能我就不细说了,这是html知识!

然后在里面的页面跳转action的时候,你需要拿到request和response这连个对象,可以让你的action去实现ServletRequestAware和ServletResponseAware接口!

这样你就拿到了request 和response对象 接下来就可以去判断用户是否有勾选了记住密码这个功能,从request里面取值判断!

然后决定是否要使用cookie记住用户的密码!


这是我的action基类,也就是自己写了一个去实现ServletRequestAware和ServletResponseAware接口,然后我其他的action在去继承这个类

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{protected HttpServletRequest request;protected HttpServletResponse response;@Overridepublic void setServletResponse(HttpServletResponse arg0) {this.response= arg0;}@Overridepublic void setServletRequest(HttpServletRequest arg0) {this.request = arg0;}}
这是实际继承action基类的子类

package com.chen.elec.web.action;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.Hashtable;import java.util.List;import javax.annotation.Resource;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.chen.elec.domain.ElecUser;import com.chen.elec.service.ElecCommonMsgService;import com.chen.elec.service.ElecLogService;import com.chen.elec.service.ElecUserService;import com.chen.elec.util.LoginUtils;import com.chen.elec.util.MD5keyBean;import com.chen.elec.web.form.ElecCommonMsgForm;import com.chen.elec.web.form.ElecLoginForm;import com.opensymphony.xwork2.ModelDriven;@Controller("elecHomeAction")@Scope("prototype")public class ElecHomeAction extends BaseAction{static {}@Overridepublic ElecLoginForm getModel() {return elecLonginForm;}/*public void ElecHomeAction(){msgList = elecCommonMsgService.getTodayCommonMsgByDate();}*/public String home() throws IOException{LoginUtils.createCookie(request,response);//这就是我用来实现去记住用户密码功能的一个类,只需要传入reques 和response即可return "home";}}
这里面为了使大家看起来方便,我把我其他的代码都省略了,都是没有影响的!

这里是具体的记住密码方法实现

package com.chen.elec.util;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginUtils {public static void createCookie(HttpServletRequest request,HttpServletResponse response) {String name=null;String password=request.getParameter("password");//获取用户的密码try {name = URLEncoder.encode(request.getParameter("name"), "UTF-8");//获取用户的登录名//因为用可能用户的登录名是使用的中文,所以这里将用户的中文名进行编码,如果你的用户名不是中文//这里可以省略,直接使用原用户名写入cookie} catch (UnsupportedEncodingException e) {e.printStackTrace();}String remember = request.getParameter("remember");//获取用户是否有勾选记住密码的值Cookie nameCookie = new Cookie("name",name);//新建用户名cookie对象Cookie passwordCookie = new Cookie("password",password);//新建密码cookie对象if(remember!=null&&remember.equals("remember")){//如果用户勾选了记住密码的功能//则执行if内部的条件语句nameCookie.setMaxAge(7*24*60*60);//设置cookie的有效时长 单位是秒passwordCookie.setMaxAge(7*24*60*60);//nameCookie.setPath(request.getContextPath()+"/");//设置c有效范围cookie的,这里是整个上下文环境passwordCookie.setPath(request.getContextPath()+"/");response.addCookie(nameCookie);//写入cookieresponse.addCookie(passwordCookie);}else{nameCookie.setMaxAge(0);/** * 如果用户没有勾选记住密码的功能,那么在页面跳转的时候 * 执行改方法就会把cookie的有效时长清零。这样记住密码功能就不能使用了 */passwordCookie.setMaxAge(0);}}}

这是页面的代码

<%@page import="java.net.URLDecoder"%><%@ page language="java"  pageEncoding="UTF-8" import="javax.servlet.http.Cookie,java.net.URLEncoder;"%><%@ taglib uri="/struts-tags" prefix="s" %><%String name="";//设置从cookie接受登录名的变量String password="";//设置从cookie接受密码的变量String check ="";//设置是否有勾选记住密码的标识Cookie[] cookies = request.getCookies();//从request中获取cookie 这里拿到的是一个cookie对象数组for(int i=0;cookies!=null&&i<cookies.length;i++){Cookie cookie = cookies[i];if(URLDecoder.decode(cookie.getName(), "UTF-8").equals("name")){name=URLDecoder.decode(cookie.getValue(), "UTF-8");check="checked";}/* /*前面的时候我们对用户的登录名进行了编码,因为这样才可以写入cookie当中*当然如果你是英文字母则不需要这样做,我指的是中文 所以这里还要对用户名进行解码*然后判断是不是cookie的名字是不是等于name 是的话就把值付给变量name*注意这里的两个name不是同一个变量,只是我刚好用了相同的标识而已 如果获取到了用户名*说面这个用户上次是勾选了记住密码的 所以这次要给check赋值为checked*至于为什么要赋值为checked 你如果了解html当中的复选框的话 我相信你会明白的*下面的密码同理*/if(cookie.getName().equals("password")){password=cookie.getValue();}}%><html><head><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><LINK href="${pageContext.request.contextPath}/css/buttonstyle.css" type="text/css" rel="stylesheet"><LINK href="${pageContext.request.contextPath}/css/MainPage.css" type="text/css" rel="stylesheet"><script type='text/javascript' src='${pageContext.request.contextPath}/script/pub.js'></script><script type="text/javascript" src='${pageContext.request.contextPath}/script/validate.js'></script><STYLE type=text/css>BODY { margin: 0px; }FORM {MARGIN: 0px; BACKGROUND-COLOR: #ffffff} </STYLE><title>国家电力监测中心</title></head><body onload="ini()"><form id="form1" name="form1"  method="post" ><table border="0" width="100%" id="table1" height="532" cellspacing="0" cellpadding="0" ><tr><td> </td></tr><tr><td height="467"><table border="0" width="1024" id="table2" height="415" cellspacing="0" cellpadding="0" ><br><br><br><br><br><tr><td width=12%></td><td align=center background="${pageContext.request.contextPath}/images/index.jpg"><table border="0" width="98%" id="table3" height="412" cellspacing="0" cellpadding="0"><tr height=122><td colspan=2></td></tr><tr><td height="313" width="73%"></td><td height="99" width="27%"><table border="0" width="70%" id="table4"><tr><td  colspan="2"><font style="color:red;"><s:fielderror fieldName="errorName"></s:fielderror><s:fielderror fieldName="errorPopedom"></s:fielderror><s:fielderror fieldName="errorRole"></s:fielderror><s:fielderror fieldName="errorPassword"></s:fielderror></font></td></tr><tr><td width="100"><img border="0" src="${pageContext.request.contextPath}/images/yonghu.gif" width="84" height="20"></td><td><input type="text" name="name" value="<%=name %>" style="width: 100 px"   maxlength="25"></td><!-- 这里把name的值写入输入框的value内部 如果name有值 他就会自动实现填充用户名--></tr><tr><td width="100"><img border="0" src="${pageContext.request.contextPath}/images/mima.gif" width="84" height="20"></td><td><input type="password" name="password" value="<%=password %>" style="width: 100 px"  maxlength="25"></td><!-- 这里把password的值写入输入框的value内部 如果password有值 他就会自动实现填充密码 --></tr><tr><td width="100"><img border="0" src="${pageContext.request.contextPath}/images/check.jpg" width="84" height="20"></td><td><table><tr><td><input type="text" name="capthca" id="captcha" onblur=""  style="width: 50px"  maxlength="4"></td><td><img src="${pageContext.request.contextPath}/image.jsp" id="captchaJsp" onclick="changeCaptcha()"/></td></tr></table></td></tr><tr><td width="100"><img border="0" src="${pageContext.request.contextPath}/images/remeber.jpg" width="84" height="20"></td><td><input type="checkbox" name="remember" id="remember" value="remember" <%=check %>></td><!-- 这里把check的值写入复选框的标签 如果check字符串有值并且为“checked”那么就会显示勾选如果没有 就不会有任何影响 --></tr><tr><td width="100"></td><td width="100"><input type="button"  id="logon" class="btn_mouseout" onmouseover="this.className='btn_mouseover'" onmouseout="this.className='btn_mouseout'" value=" 登  录 "  onclick="check()"></td></tr></table></td></tr></table></td><td width=13%></td></tr><tr>      <td align="center" colspan=3> </td>        </tr></table></td></tr></table></form></body></html>


0 0
原创粉丝点击