七天免登陆得到设置以及遇到的一些bug

本文介绍了在项目中实现七天免登录功能的步骤,包括创建登录界面、登录处理Servlet、过滤器以及数据库操作。在实现过程中,重点讨论了过滤器的逻辑,特别是如何检查和处理Cookie中的用户信息,以及避免无限过滤死循环的问题。同时,指出了配置路径错误可能导致服务器无法启动的常见错误。

最近的项目中,需要用到登录页面的七天免登录功能。在编写代码过程中,我也遇到了一些挫折,主要是bug的判断。再次分享一下。

首先要写一个登录界面,一个登录处理的servlet,一个过滤器,再就是底层数据库的查找了。

先看看登陆的处理,我们需要获取七天免登录 的选项是否被选中。若登陆成功且免登录选项被选中,就使用cookie保存用户的账号。使用response添加。

因为项目需求,大家只需参考与自己相关的。

接下来对登录界面的jsp进行过滤。写一个过滤器。

package com.itembank.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.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itembank.entity.StudentTable;
import com.itembank.entity.TeacherTable;
import com.itembank.service.ILoginService;
import com.itembank.service.LoginServiceImpl;

/**
 * Servlet Filter implementation class aa2
 */
@WebFilter("/admin/index/login.jsp")
public class PassLoginFilter implements Filter {

    public void doFilter(ServletRequest re, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        System.out.println("来过");
        HttpServletRequest request=(HttpServletRequest)re;
        HttpServletResponse response=(HttpServletResponse)res;
        Cookie[] cookies = request.getCookies();
        if(cookies==null||cookies.length==1) {
            chain.doFilter(request, response);
        }else {
            String num="";
            String access="";
            boolean flag=false;
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName()+"+++"+cookie.getValue());
                if(cookie.getName().equals("JSESSIONID")) {
                    continue;
                }
                if(cookie.getName().equals("num")) {
                    num=cookie.getValue();
                }
                if(cookie.getName().equals("access")) {
                    access=cookie.getValue();
                }
            }
            //System.out.println("aa"+num);
           // System.out.println("aa"+access);
            ILoginService service=LoginServiceImpl.getInstance();
            flag=service.isUserExit(access,num);
           // System.out.println(flag);
            if(flag) {
                if("student_table".equals(access)) {
                    StudentTable student = service.getStudentUserByUserNum(num);
                    request.getSession().setAttribute("student", student);
                    response.sendRedirect("/itembank/admin/index/student_index.jsp");
                }else if("teacher_table".equals(access)) {
                    TeacherTable teacher = service.getTeacherUserByUserNum(num);
                    request.getSession().setAttribute("teacher", teacher);
                    response.sendRedirect("/itembank/admin/index/teacher_index.jsp");
                }
            }else {
                chain.doFilter(request, response);
            }
        }
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
 

要特别注意的是,注解中路径的书写。因为要写具体的jsp,所以使用该jsp的全路径。我之前因为只写了login.jsp 路径的错误导致我的服务器直接启动不起来,这里一定要注意。

再就是当cookie的保存值不存在或者数据库中查找不到时,不要使用转发或重定向到login.jsp。只需chain.dofiler .不然会进入到无限过滤的死循环中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值