Web开发-拦截器介绍

目录

拦截器的主要作用

  • 完成请求参数的解析,将页面表单参数赋给值栈中相应属性,执行功能检验,程序异常调试等工作。
  • 在MVC设计模式的框架下,拦截器可以对用户的请求进行全局拦截,对多个Controller做拦截,并且常用在用户登录处理、权限检查、记录日志等方面。
  • MVC 中的拦截器 (Interceptor) 主要用于对请求进行拦截和处理,它可以在请求处理之前或之后执行一些操作,例如记录日志、验证权限、数据校验等。
  • 拦截器可以在控制器方法执行之前或之后执行,也可以在视图渲染之前或之后执行。通过使用拦截器,可以提高应用程序的安全性、性能和可维护性。

场景:验证用户登录是否有效

  • 比如说登录页面的网址是***/login,登录后的主页的网址是***/index,这里的拦截器就是为了防止没有登录的用户/登录过时的用户点击登录后【Ajax请求】直接跳转到主页而设计

拦截Ajax请求

java 复制代码
String requestURI = request.getRequestURI();
HttpSession session = request.getSession();
Object attribute = session.getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
if(attribute == null){
	log.info("用户还未登录或者session失效,重定向到登录页面,当前URL=" + requestURI);
	//首先判断是否是ajax请求
	if(StringUtil.isAjax(request)){
		//表示是ajax请求,那么就返回错误信息
		try {
			response.setCharacterEncoding("UTF-8");
			response.getWriter().write(JSON.toJSONString(CodeMsg.USER_SESSION_EXPIRED));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}//下接

拦截其他请求

  • 【比如未登录但直接输入了主页的网址】
java 复制代码
	try {
		response.sendRedirect("/system/login");
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return false;
}//上接
相关推荐
鬼手点金6 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
蛋蛋的就会顺顺的6 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday7 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
朱涛的自习室7 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
需要8267 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡7 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
码艺-Alimjan7 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床7 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
凤山老林8 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
子非鱼a9 小时前
【文件上传】一个普普通通的edu16
前端