本文概览:通过cookie来实现使用用户名和密码分别为admin来进行登录和退出功能。
1 登录验证demo
1、login.html
1 2 3 4 5 6 7 8 9 10 11 12 |
<html> <head> <title>login form</title> </head> <body> <form method="post" action="/ogin"> <input type="text" name="userName"/> <input type="text" name="password" /> <button type="submit">Login</button> </form> </body> </html> |
2、过滤器逻辑
用户发送请求,请求中会带有相应的cookie信息。在过滤器中进行判断用户是否已经登录
- 如果没有登录,则跳转到登录页面
- 如果是已经登录,则通过过滤器。判断cookie中含是否含有登录信息。
- 如果是静态资源,则需要跳过过滤器。这里判断url总是否包含/data、/dist、/js、/less、/vendor
- 如果是退出和登录校验等请求,也需要跳过过滤器。通过判断url中是否包含/login、/loginCheck、/loginOut。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; String url = servletRequest.getRequestURI().substring(servletRequest.getContextPath().length()); // 过滤登录页面 if(url.contains("/login") || url.contains("/loginCheck") || url.contains("/loginOut") ){ chain.doFilter(request, response); return; } // 过滤静态资源 if(url.contains("/data") || url.contains("/dist") || url.contains("/js") || url.contains("/less") || url.contains("/vendor") || url.contains("*.js") ){ chain.doFilter(request, response); return; } // 获取cookie的值 Cookie[] cookies=servletRequest.getCookies(); String userName = ""; if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("licai-admin")) { userName =cookie.getValue(); } } } // 3.没有登录,跳转到登录页面 if(StringUtils.isEmpty(userName)){ servletResponse.sendRedirect("/login"); return; } // 4.已经是登录状态 chian.doFilter(request, response); } @Override public void destroy() { } } |
3、 登录页面、登录校验、退出
如果发现用户名和密码都正确,则此时向用户客户端写cookie。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
@Controller public class LoginController { /** * 登录页面 */ @RequestMapping("/login") public String login() { return "login"; } /** * 登录校验 */ @RequestMapping("/loginCheck") public String loginCheck(HttpServletRequest request, HttpServletResponse response){ String userName = request.getParameter("userName"); String passward = request.getParameter("password"); if(StringUtils.isEmpty(userName) || StringUtils.isEmpty(passward)){ return "login"; } // 校验用户名和密码 if(!StringUtils.equals("admin",userName) || !StringUtils.equals("admin",passward)){ return "login"; } // 写入cookie Cookie cookie = new Cookie("admin","admin"); cookie.setPath("/"); cookie.setMaxAge(60*60*24*3); response.addCookie(cookie); // 返回默认页面。redirect表示跳转 return "redirect:/"; } /** * 退出 */ @RequestMapping("/loginOut") public String loginOut(HttpServletRequest request, HttpServletResponse response) { // 1、清空cookie Cookie cookie = new Cookie("licai-admin","admin"); cookie.setPath("/"); cookie.setMaxAge(0); response.addCookie(cookie); // 2.返回到登录页面 return "login"; } } |
1、cookie失效
cookie.setMaxAge(0);
(全文完)