后台(25)——Filter(2)
发布日期:2021-06-30 11:17:59 浏览次数:2 分类:技术文章

本文共 4061 字,大约阅读时间需要 13 分钟。




版权声明

  • 本文原创作者:
  • 作者博客地址:

自动登录

在本篇博客中我们将完成一个小例子:利用Servlet、Filter、C3P0、MD5、HttpSession、Cookie实现等技术实现自动登录。

这里写图片描述

请看,本次示例的项目结构

这里写图片描述

在此,详解项目中的核心代码。

/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */package cn.com.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.com.bean.User;import cn.com.service.UserService;import cn.com.service.impl.UserServiceImpl;import cn.com.util.MD5Utils;public class LoginServlet extends HttpServlet {
private final String MESSAGE="message"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username=request.getParameter("username"); String password=request.getParameter("password"); password=MD5Utils.md5(password); UserService userService=new UserServiceImpl(); User user=userService.findUser(username, password); if(user!=null){ String autologin=request.getParameter("autologin"); Cookie cookie=new Cookie("userinfo", user.getUsername()+"&"+user.getPassword()); cookie.setPath("/"); if(autologin==null){ cookie.setMaxAge(0); }else{ cookie.setMaxAge(60*60*24*3); } response.addCookie(cookie); request.getSession().setAttribute("user", user); request.getRequestDispatcher("/home.jsp").forward(request, response); }else{ request.setAttribute(MESSAGE, "用户名或者密码错误,请重新登录"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}
  • 获取表单传递过来的参数,请参见代码第24-25行
  • 从数据库查询用户,请参见代码第28行
  • 生成Cookie并返回给客户端,请参见代码第30-38行
  • 依据是否自动登录设置Cookie的MaxAge,请参见代码第33-37行
  • 将用户User保存到Session中,请参见代码第39行
/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */package cn.com.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;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 cn.com.bean.User;import cn.com.service.UserService;import cn.com.service.impl.UserServiceImpl;public class LoginFilter implements Filter{
@Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) req; HttpServletResponse response=(HttpServletResponse) res; String path = request.getContextPath(); String uri = request.getRequestURI(); path = uri.substring(path.length()); if (!("/login.jsp".equals(path) || "/loginServlet".equals(path))) { User user=(User) request.getSession().getAttribute("user"); if(user==null){ String username=null; String password=null; Cookie[] cookies = request.getCookies(); for(int i=0;cookies!=null&&i
  • 如果访问的不是登录相关的资源那么就考虑是否自动登录,请参见代码第39-62行
  • 如果用户没有登录过则开始自动登录,请参见代码第40-61行
  • 自动登录成功后将User保存到Session中,请参见代码第59行
loginFilter
cn.com.filter.LoginFilter
loginFilter
/*
loginServlet
cn.com.servlet.LoginServlet
loginServlet
/loginServlet
index.jsp

在web.xml中配置Servlet和Filter

转载地址:https://it9527.blog.csdn.net/article/details/56688625 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:后台(26)——Filter(3)
下一篇:后台(24)——Filter(1)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月25日 02时29分16秒