javaweb项目设置自动登录

1.登录页面:login.jsp

<div id="login">
    <h1>登录</h1>
    <form id="form_login" action="LoginServlet" method="post">
        <input type="text" required="required" placeholder="用户名" name="login_name" id="login_name"></input>
        <input type="password" required="required" placeholder="密码" name="login_pass" id="login_pass"></input>
        自动登录时间<select name="savetime" style="margin-bottom: 10px; font-size: 13px;margin-left: 10px;border-radius: 4px;background-color: #2D2D3F;">
        <option value="7">一    周</option>
        <option value="30">一个月</option>
        </select><br>
        <button class="but" type="submit">登录</button>
    </form>
</div>

2.登录页login.jsp对应的servlet:

@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setCharacterEncoding("utf-8");
        //1.处理跨域请求
        setResponseAccess(response);
        //2.接收传过来的数据
        String name = request.getParameter("name"); //得到jsp页面传过来的参数login_name
        String pwd = request.getParameter("pass");
        System.out.println("账号=="+name+"\n");
        System.out.println("密码=="+pwd+"\n");
        String savetime=request.getParameter("savetime");
        System.out.println("保存时间=="+savetime+"\n");
        //3.连接数据库
        LoginUserDao loginUserDao=new LoginUserDao();
        //4.根据接收的数据,查询数据库
        boolean flag=loginUserDao.getSelect(name,pwd);
        System.out.print("====flag===="+flag+"\n");
        //5.返回前台信息
        if (flag){
            int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的
              int seconds=saveTime*24*60*60;
            Cookie cookie = new Cookie("user", name+"=="+pwd);
            cookie.setMaxAge(seconds);
            response.addCookie(cookie);

            System.out.println("设置cooke登录=="+"\n");
            request.setAttribute("name",name);
            request.getRequestDispatcher("home.jsp").forward(request,response);
        }else {
            PrintWriter out;
            out=response.getWriter();
            out.write("账号或密码错误!"+"\n");
        }


    }
    //处理跨域请求方法
    private void setResponseAccess(HttpServletResponse response) {
        // 允许该域发起跨域请求
        response.setHeader("Access-Control-Allow-Origin", "*");//*允许任何域
        // 允许的外域请求方式
        response.setHeader("Access-Control-Allow-Methods", "POST, GET");
        // 999999秒内,不需要再发送预检验请求,可以缓存该结果
        response.setHeader("Access-Control-Max-Age", "999999");
        // 允许跨域请求包含某请求头,x-requested-with请求头为异步请求
        response.setHeader("Access-Control-Allow-Headers",
                "x-requested-with");
    }

}
3.过滤器:

LoginFilter

public class LoginFilter implements Filter {
    public LoginFilter(){
        System.out.println("LoginFilter过滤器构造");
    }
    public void destroy() {
        System.out.println("LoginFilter过滤器销毁");
    }
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
                         FilterChain arg2) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) arg0;
        HttpServletResponse response = (HttpServletResponse) arg1;
        Cookie[] cookies = request.getCookies();
        String[] cooks = null;
        String username = null;
        String password = null;
        if (cookies != null) {
            for (Cookie coo : cookies) {
                String aa = coo.getValue();
                cooks = aa.split("==");
                if (cooks.length == 2) {
                    username = cooks[0];
                    password = cooks[1];
                }
            }
        }
        //3.连接数据库
        LoginUserDao loginUserDao=new LoginUserDao();
        //4.根据接收的数据,查询数据库
        boolean flag=loginUserDao.getSelect(username,password);
        System.out.print("====cooke检测连接数据库是否成功flag===="+flag+"\n");
        if (flag) {
            System.out.println("cooke中取出开始跳转=="+"\n");
            System.out.println("cooke中取出=="+username+"\n");
            request.setAttribute("login_name",username);
//            request.getSession().setAttribute("login_name",username);
            request.getRequestDispatcher("home.jsp").forward(request, response);
        }else{
            arg2.doFilter(request,response);
        }


    }

    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("过滤器初始化");
    }

}

4.web.xml配置:

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.utils.LoginFilter</filter-class><!--全路径 从根包开始一直到类名-->
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/login.jsp</url-pattern><!--只过滤登录页-->
</filter-mapping>
<!--servlet类路径配置-->
<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.servlet.LoginServlet</servlet-class>
</servlet>
<!--servlet类映射配置-->
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list><!--默认首页地址-->
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

 

猜你喜欢

转载自blog.csdn.net/qq_37164847/article/details/80194423
今日推荐