java使用Filter实现自动登录的方法

发布时间 - 2026-01-11 00:34:11    点击率:

本文实例为大家分享了java实现自动登录的具体代码,供大家参考,具体内容如下

  • 当你勾选(记住登录状态),用cookie保存用户名和密码。不勾选,cookie失效。
  • 所有的页面都要经过autoLoginFilter.java 的过滤器,在这类中,必须要判断cookies不为null,获得所有的cookie,得到name为user的cookie,进行用户名和密码的验证,如果不为null,则将user存入session。
  • 在LoginServlet.java中,获得username和password参数,进行dao验证,如果不为空,放入seesion中,进行页面跳转。
  • 创建cookie对象。setpath("/"),表示本应用下的所有路径都能访问此cookie。
  • 对于已经正确登录的用户,再次访问其他页面必定会再次经过autoLoginFilter,这时,判断当前session中的user是否为null,不为null,直接通过。
  • 对于**login.jsp的有关页面,不需要经过autoLoginFilter。
package com.learning.web.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;

import com.learning.domain.User;
import com.learning.service.UserService;

@WebServlet("/servlet/loginServlet")
public class LoginServlet 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 autologin = request.getParameter("autologin");
  
  UserService userService=new UserService();
  User user = userService.findUser(username, password);
  //user不为null,则登录成功
  if (user!=null) {
  //创建cookie来保存用户信息
  Cookie cookie=new Cookie("user", user.getUsername()+"&"+user.getPassword());
  cookie.setPath("/");
  //autologin不为null,则记住了登录状态
  if (autologin!=null) {
   cookie.setMaxAge(1*60*60*24);//一天的有效时间
  }
  else {
   cookie.setMaxAge(0);
  }
  response.addCookie(cookie);
  request.getSession().setAttribute("user", user);
  request.getRequestDispatcher("/home.jsp").forward(request, response);
  }else {
  response.sendRedirect(request.getContextPath()+"/homeLogin.jsp");
  }
  
 }

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

}
package com.learning.web.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.annotation.WebInitParam;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.core.Config;

import com.learning.domain.User;
import com.learning.service.UserService;

@WebFilter(urlPatterns="/*",initParams={@WebInitParam(name="autologin",value="login"),@WebInitParam(name="",value="")})
public class AutoFilter implements Filter{

 private FilterConfig filterConfig;
 @Override
 public void destroy() {
 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
 // 转换对象
 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
 HttpServletResponse httpServletResponse = (HttpServletResponse) response;
 // 获得访问的路径
 String uri = httpServletRequest.getRequestURI();
 String contextPath = httpServletRequest.getContextPath();
 uri = uri.substring(contextPath.length() + 1);
 // 获得初始化参数
 String login = filterConfig.getInitParameter("autologin");
 System.out.println("直接通行的路径:"+login);
 // 不包含"login"的路径就要进行过滤 (xxxlogin.jsp 不需要自动登录)
 if (!uri.contains(login)) {
  HttpSession session = httpServletRequest.getSession();
  User u = (User) session.getAttribute("user");
  if (u != null) {
  System.out.println("session不为null");
  chain.doFilter(request, response);
  } else {

  // 处理业务逻辑
  // 1.获得cookie 得到User的信息

  String username = "";
  String password = "";
  UserService userService = new UserService();
  Cookie[] cookies = httpServletRequest.getCookies();
  for (int i = 0;cookies!=null&& i < cookies.length; i++) { 
   if ("user".equals(cookies[i].getName())) {
   String string = cookies[i].getValue();
   String[] values = string.split("&");
   username = values[0];
   password = values[1];
   User user = userService.findUser(username, password);
   
   // 不为空则放入session
   if (user != null) {
    System.out.println("自动登录了");
    httpServletRequest.getSession().setAttribute("user", user);
   }
   }
  }
  }
 }
 // 2.放行
 chain.doFilter(request, response);
 }


 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 
 this.filterConfig=filterConfig;
 
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # Filter  # 自动登录  # java中使用Filter控制用户登录权限具体实例  # Java使用Filter实现登录验证  # 不为  # 不需要  # 为空  # 勾选  # 都要  # 在这  # 都能  # 当你  # 跳转  # 大家分享  # 具体内容  # 大家多多  # 则将  # 不包含  # 类中  # 必须要  # 记住了  # learning  # web 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用wdcp快速搭建高效网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  网站图片在线制作软件,怎么在图片上做链接?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何在阿里云部署织梦网站?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  如何在橙子建站上传落地页?操作指南详解  如何在VPS电脑上快速搭建网站?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  微信小程序 scroll-view组件实现列表页实例代码  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  如何快速生成可下载的建站源码工具?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  JavaScript Ajax实现异步通信  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  微信小程序 require机制详解及实例代码  如何用AWS免费套餐快速搭建高效网站?  免费网站制作appp,免费制作app哪个平台好?  中山网站推广排名,中山信息港登录入口?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  JavaScript常见的五种数组去重的方式  使用豆包 AI 辅助进行简单网页 HTML 结构设计  海南网站制作公司有哪些,海口网是哪家的?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何在阿里云高效完成企业建站全流程?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Android仿QQ列表左滑删除操作  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Linux系统运维自动化项目教程_Ansible批量管理实战  三星网站视频制作教程下载,三星w23网页如何全屏?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何续费美橙建站之星域名及服务?  原生JS获取元素集合的子元素宽度实例  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  浅谈javascript alert和confirm的美化  原生JS实现图片轮播切换效果  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Python函数文档自动校验_规范解析【教程】  大同网页,大同瑞慈医院官网?