自动登录
自动登陆的代码实现:
demo: 控制层 |
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username"); String password = request.getParameter("password"); //MD5加密 password = MD5Utils.md5(password); UserService us = new UserService(); User user = us.findUser(username,password);
if(user!=null){ String autologin = request.getParameter("autologin"); Cookie cookie = new Cookie("user", user.getUsername()+"&"+user.getPassword()); cookie.setPath("/"); if(autologin!=null){//要把用户信息保存到cookie中 cookie.setMaxAge(60*60*24*7); }else{//要清除cookie对象的数据 cookie.setMaxAge(0); } response.addCookie(cookie);//把cookie对象保存到客户端
request.getSession().setAttribute("user", user); request.getRequestDispatcher("/home.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 { doGet(request, response); }
} |
过滤器 |
public class AutoLoginFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 1、转换两个对象HttpServletRequest,HttpServletResponse HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response;
String uri = req.getRequestURI();// /day17_02_autologin/login.jsp String path = req.getContextPath();// /day17_02_autologin path = uri.substring(path.length()); // /login.jsp
//如果请求的资源不是login.jsp,也不是/servlet/loginServlet,才往下执行 if (!("/login.jsp".equals(path) || "/servlet/loginServlet".equals(path))) { User user = (User) req.getSession().getAttribute("user"); //如果session得到了user对象,说明已经登录过或自动登录过。 //那么请求下一个资源时就不用执行自动登录了。 //用户没有登录过,我们才执行自动登录 if (user == null) { System.out.println("aaaaaaaaaaaaaaa"); // 2、处理业务 // 得到cookies数组 Cookie[] cookies = req.getCookies(); String username = ""; String password = ""; // 从数组中找到想要的user对象的信息 for (int i = 0; cookies != null && i < cookies.length; i++) { if ("user".equals(cookies[i].getName())) { String value = cookies[i].getValue();// tom&123 String[] values = value.split("&"); username = values[0]; password = values[1]; } }
// 登录操作 UserService us = new UserService(); User u = us.findUser(username, password); // 如果登录成功,把用户信息存到session中 if (u != null) { req.getSession().setAttribute("user", u); } } } // 3、放行 chain.doFilter(request, response); }
public void destroy() { // TODO Auto-generated method stub
}
} |