过滤器类,用来设置请求的编码 package filter; import java.io.I
java_web用户的自动登录模块的实现(三)
import com.sun.mail.util.BASE64DecoderStream;
import com.sun.mail.util.BASE64EncoderStream;
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import bean.Admin;
public class AdminServlet extends HttpServlet {
private AdminService adminService = new AdminServiceImpl();
// 规定时间常量,为一天
private final int EXPIRES = 60 * 60 * 24;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// request.setCharacterEncoding("UTF-8");
String oper = request.getParameter("oper");
if ("adminLogin".equals(oper)) {
adminLogin(request, response);
}
if ("login".equals(oper)) {
request.getRequestDispatcher("./login.jsp").forward(request,
response);
}
}
private void adminLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//获取表单提交的数据
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String mark = request.getParameter("mark");
String day = request.getParameter("day");
// System.out.println(name + "====" + pass + "====" + mark
// + "============" + day);
//根据获取的数据向数据库发送数据请求,
Admin entity = adminService.checkLogin(name, pass);
//判断查询结果
if (entity != null) {
//判断用户是否进行记录密码和自动登陆的操作
if ("mark".equals(mark)) {
// 获取当前的时间并加上要保存的时间长度
long time = System.currentTimeMillis()
+ (EXPIRES * Integer.valueOf(day)*1000);
// 声明cookie
Cookie autoCookie = null;
// 获取所有的cookie的数组
Cookie cookies[] = request.getCookies();
// 遍历判断
for (Cookie cookie : cookies) {
// 判断是否已经存在cookie记录
if ("autoLogin".equals(cookie.getName())) {
// 存在即直接赋值
autoCookie = cookie;
// 并改变内容
String newValue = name
+ ":"
+ time
+ ":"
+ md5Value(pass + ":" + name + ":" + time
+ ":donghongyujava");
autoCookie.setValue(newValue);
} else {
String cookieva lue = name
+ ":"
+ time
+ ":"
+ md5Value(pass + ":" + name + ":" + time
+ ":donghongyujava");
/*
* Control character in cookie value or attribute.
* 当存入的数据是中文时,cookie会出现乱码现象 需要进行编码的转换
*/
autoCookie = new Cookie("autoLogin", URLEncoder.encode(
cookieva lue, "UTF-8"));
}
}
// 设置cookie的最长的存活时间
autoCookie.setMaxAge(EXPIRES * Integer.valueOf(day));
response.addCookie(autoCookie);
}
// 将admin存入到session
request.getSession().setAttribute("admin", entity);
// 设置成功后就登陆操作
request.getRequestDispatcher("./sc.jsp").forward(request, response);
} else {
request.setAttribute("msg", "用户名或密码错误请重试");
request.getRequestDispatcher("./login.jsp").forward(request,
response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
//加密的操作方法
public String md5Value(String value) {
try {
// 获取md5加密的对象
MessageDigest digest = MessageDigest.getInstance("md5");
// 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,
byte result[] = digest.digest(value.getBytes());
//需要的jdk版本myeclipse2013中自带的com.sun.java.jdk.win32.x86_64_1.6.0.u43
//jdk1.7.0_25没有相关的包
BASE64Encoder encoder = new BASE64Encoder();
// 返回加密后的数据
return encoder.encode(result);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
};
}