自动登录——(三)
1. 登录页面定义一个自动登录复选框
<span id="auto"></span><input type="checkbox" name="autologin" value="autologin"><lable style="color:red">自动登录</lable></span>
2.用户登录的时候判断用户是否选中自动登录,如果选中后设置cookie。
package web; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import daomain.User; import service.UserService; /** * * @author: qlq * @date : 2017年7月6日上午10:19:37 * @description: chuli denglu */ @WebServlet("/login") public class login extends HttpServlet { private UserService userService = null; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); // 获取客户端输入 String name = request.getParameter("name"); System.out.println(name); String password = request.getParameter("password"); System.out.println(name + "\t" + password); userService = new UserService(); User user = userService.findUserByNamePassword(name, password); // 登录成功 if (user != null) { System.out.println(user.getName() + user.getPassword()); request.getSession().setAttribute("user", user); System.out.println(user); String autologin = request.getParameter("autologin"); // 如果用户选择自动登录 if (autologin != null) { // 增加cookie,解码防止中文乱码 Cookie cookie_username=new Cookie("username", URLEncoder.encode(user.getName(),"UTF-8")); Cookie cookie_password=new Cookie("password", user.getPassword()); // 设置生命期 cookie_password.setMaxAge(60*60*24); cookie_username.setMaxAge(60*60*24); // 设置cookie的携带路径 cookie_password.setPath(request.getContextPath()); cookie_username.setPath(request.getContextPath()); // 增加cookie response.addCookie(cookie_username); response.addCookie(cookie_password); System.out.println(autologin); } else { } request.getRequestDispatcher("/index.jsp").forward(request, response); } // 登录失败 else { request.getRequestDispatcher("/login.html").forward(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3.设置一个自动登录过滤器
package web.filter; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import javax.activation.URLDataSource; 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.annotation.WebFilter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import daomain.User; import service.UserService; /** * Servlet Filter implementation class autoLoginFilter */ public class autoLoginFilter implements Filter { /** * Default constructor. */ public autoLoginFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 获得cookie进行用户名进行登录 HttpServletRequest req =(HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; HttpSession session = req.getSession(); Cookie[] cookies = req.getCookies(); String username = null; String password = null; if(cookies!=null){ // 获得名字是username password的cookie for(Cookie cookie:cookies){ if(cookie.getName().equals("username")){ // cookie不能设置中文,需要进行编码 username = URLDecoder.decode(cookie.getValue(), "UTF-8"); } if(cookie.getName().equals("password")){ password = cookie.getValue(); } } } // 判断用户名和密码是否为空 if(username!=null&&password!=null){ UserService userService = new UserService(); User user = userService.findUserByNamePassword(username, password); // 登录成功 if (user != null) { System.out.println(user.getName() + user.getPassword()); session.setAttribute("user", user); } } // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
4.web.xml配置过滤器
<filter> <filter-name>login</filter-name> <filter-class>web.filter.autoLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>login</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
5.自动登录一次查看cookie
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix