需求
实现十天内免登陆的功能,当用户成功登陆后,十天内可以自动登录。用户名和密码直接写在代码中即可。
思路
用户登录成功之后将用户名和密码放到cookie中,当用户下次访问服务器时获取cookie中的用户名和密码与正确的用户名和密码做匹配,如果一致则直接登录成功。
解决
第一次登录时向浏览器响应表单数据,LoginServlet
package com.monkey1024.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 用户登录
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
String userName = "";
String password = "";
//得到客户端保存的Cookie数据
Cookie[] cookies = request.getCookies();
for (int i = 0;cookies!=null && i < cookies.length; i++) {
if("userName".equals(cookies[i].getName())){
userName = cookies[i].getValue();
}
if("password".equals(cookies[i].getName())){
password = cookies[i].getValue();
}
}
//与cookie中的用户名和密码做匹配
if("admin".equals(userName) && "123456".equals(password)){
out.write("登录成功!");
}else{
out.write("<form action='/servlet/doLogin' method='post'>");
out.write("用户名:<input type='text' name='userName' /><br/>");
out.write("密码:<input type='password' name='password'/><br/>");
out.write("<input type='checkbox' name='remember' />十天免登陆<br/>");
out.write("<input type='submit' value='登录'/><br/>");
out.write("</form>");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
登录成功后将用户名和密码放入cookie中:
package com.monkey1024.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 登录
*/
public class DoLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获取表单数据
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String remember = request.getParameter("remember");
Cookie cookie1 = new Cookie("userName", userName);
Cookie cookie2 = new Cookie("password", password);
cookie1.setPath("/");
cookie2.setPath("/");
if("admin".equals(userName)&&"123456".equals(password)){
if(remember!=null){
cookie1.setMaxAge(60 * 60 * 240);//设置Cookie的有效保存时间为十天
cookie2.setMaxAge(60 * 60 * 240);
response.addCookie(cookie1);//将Cookie写回到客户端
response.addCookie(cookie2);
}
out.write("登录成功!");
}else{
out.write("登录失败!");
//设置2秒跳到重新登录
response.setHeader("refresh", "2;url=/servlet/login");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
网友评论