最近的项目中,需要用到登录页面的七天免登录功能。在编写代码过程中,我也遇到了一些挫折,主要是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 .不然会进入到无限过滤的死循环中。
本文介绍了在项目中实现七天免登录功能的步骤,包括创建登录界面、登录处理Servlet、过滤器以及数据库操作。在实现过程中,重点讨论了过滤器的逻辑,特别是如何检查和处理Cookie中的用户信息,以及避免无限过滤死循环的问题。同时,指出了配置路径错误可能导致服务器无法启动的常见错误。

5590

被折叠的 条评论
为什么被折叠?



