用Filter实现自动登录

图解:
在这里插入图片描述

package web;

import java.io.IOException;
import java.sql.SQLException;

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.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import domain.User;
import service.LoginService;

public class AutoLoginFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 强制转换
		HttpServletRequest req=(HttpServletRequest) request;
		HttpServletResponse resq=(HttpServletResponse) response;
		HttpSession session=req.getSession();
		//获取cookie进行登录操作
		//定义cookie_username和cookie_password
		String cookie_username=null;
		String cookie_password=null;
		//获取cookie
		Cookie []cookies=req.getCookies();
		//获取名字是cookie_name和cookie_password
		for (Cookie cookie : cookies) {
			if ("cookie_username".equals(cookie.getName())) {
				cookie_username=cookie.getValue();
			}
			if ("cookie_password".equals(cookie.getName())) {
				cookie_password=cookie.getValue();
			}
		}
		//判断cookie_username是否为空
		if (cookie_username!=null&&cookie_password!=null) {
			//进行登录
			User user=null;
			
			try {
				LoginService service=new LoginService();
				user=service.findUser(cookie_username,cookie_password);
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//将用户保存到session,目的让其他页面也能用
			session.setAttribute("user", user);
			
		}
		//放行
		chain.doFilter(req, resq);
		//配置文件
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}
	
}

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import domain.User;
import service.LoginService;
import utils.C3p0UtilsDao;

/**
 * Servlet implementation class LoginServlet
 */

public class LoginServlet extends HttpServlet {
	
  
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//获取数据
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		//封装数据(这里忽略)
		//传递数据
		User user=null;
		
		try {
			LoginService service=new LoginService();
			user=service.findUser(username,password);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (user!=null) {
			//判断用户是否勾选自动登录
			String autologin=request.getParameter("autologin");
			if (autologin!=null) {
				//创建cookie
				Cookie cookie_username=new Cookie("cookie_username", user.getUsername());
				Cookie cookie_password=new Cookie("cookie_password",user.getPassword());
				//设置持久化时间
				cookie_username.setMaxAge(60*60);
				cookie_password.setMaxAge(60*60);
				//设置cookie的携带路径(该项目的路径)
				cookie_username.setPath(request.getContextPath());
				cookie_password.setPath(request.getContextPath());
				//发送cookie
				response.addCookie(cookie_username);
				response.addCookie(cookie_password);
			}
			//将用户保存到session,目的让其他页面也能用
		HttpSession session=request.getSession();
		session.setAttribute("user", user);
		//重定向到首页
		response.sendRedirect(request.getContextPath());
		
			
		} else {
			request.setAttribute("loginInfo", "用户名或者密码错误");
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值