A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Mylo 于 2018-1-11 17:46 编辑

用户登陆的的时候,讲登录信息添加到session里面,如果勾选了自动登录,那么就讲登录信息同时也添加到Cookie里面
拦截器的逻辑:
拦截所有的请求,放行index.jsp login的请求
   判断当前的session里面是否有登录的信息 如果有的话就放行,
   如果当前的session里面没有登录的信息,判断cookie里面是否有登录信息,如果有的话 放行
   如果当前的session里面既没有登录信息,cookie里面也没有登录信息,就表示是第一次登录
   如果请求的不是登录的方法(login)那么就让他进入到登录页面

1. 页面准备
1.1 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

</head>
<body>
<body>
    用户登录<br>${msg}
    <form action="login" method="post">
        用户名:<input type="text" name="userName"><br>
        密    码:<input type="password" name="password"><br>
        <input type="checkbox" name="auto" value="true"> 七天内内自动登录<br>
        <input type="submit" value="提交">
    </form>
  </body>
</body>
</html>
1.2 1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
        测试进入主页
</body>
</html>
2. servlet
package test.mylo.servlet;
import java.io.IOException;
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;
@WebServlet("/login")
public class LoginSetvlet extends HttpServlet {
        private static final long serialVersionUID = 1L;


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                String userName = request.getParameter("userName");
                String password = request.getParameter("password");
                String auto = request.getParameter("auto");
                if(userName.equals("Mylo") && password.equals("Mylo")) {
                        if(auto!=null && auto.equals("true")) {
                                Cookie cookie = new Cookie("auto", userName +"="+password);
                                cookie.setMaxAge(24 * 3600 * 7);
                                response.addCookie(cookie);
                        }
                        request.getSession().setAttribute("loginUser",  userName +"="+password);
                        request.getRequestDispatcher("/1.jsp").forward(request, response);
                }else {
                        request.getSession().setAttribute("msg", "账号或者密码有误");
                        response.sendRedirect(request.getContextPath() + "/index.jsp");
                }
        }
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
        }
}

3. Filter
package test.mylo.servlet;
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.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
逻辑:拦截所有的请求,放行index.jsp login的请求
   判断当前的session里面是否有登录的信息 如果有的话就放行,
   如果当前的session里面没有登录的信息,判断cookie里面是否有登录信息,如果有的话 放行
   如果当前的session里面既没有登录信息,cookie里面也没有登录信息,就表示是第一次登录
   如果请求的不是登录的方法(login)那么就让他进入到登录页面
*/
@WebFilter("/*")
public class AutoFilter implements Filter {
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
                HttpServletRequest request = (HttpServletRequest)req;
                HttpServletResponse response  = (HttpServletResponse) resp;
                String user =(String) request.getSession().getAttribute("loginUser");
                if(user == null) {
                        Cookie[] cookies = request.getCookies();
                        boolean flag = false;
                        if(cookies != null) {
                                for (Cookie c : cookies) {
                                        if(c.getName().equals("auto")) {
                                                String value = c.getValue();
                                                request.setAttribute("loginUser", value);
                                                flag = true;
                                                break;
                                        }
                                }
                        }
                        System.out.println( request.getRequestURI());
                        if(flag || request.getRequestURI().endsWith("index.jsp") || request.getRequestURI().endsWith("login")) {
                                
                                chain.doFilter(request, response);
                        }else {
                                response.sendRedirect(request.getContextPath() + "/index.jsp");
                        }
                }else {
                        chain.doFilter(request, response);
                }
                
        }
        
        public void init(FilterConfig fConfig) throws ServletException {
                // TODO Auto-generated method stub
        }
        @Override
        public void destroy() {
                // TODO Auto-generated method stub
                
        }
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马