SpringBoot学习笔记(11)-配置拦截器

《QEMU/KVM源码分析与应用》读书笔记1 —— 第1章 QEMU与KVM概述 《QEMU/KVM源码分析与应用》学习笔记1 —— 第一章 QEMU与KVM概述 阅读详情

更多关于SpringBoot的总结请点击:SpringBoot使用总结

拦截器、监听器及过滤器的区别

  • 拦截器:Interceptor 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。比如日志,安全等。一般拦截器方法都是通过动态代理的方式实现。可以通过它来进行权限验证,或者判断用户是否登陆,或者是像12306 判断当前时间是否是购票时间。

  • 监听器:listener是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件。监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理。其主要可用于以下方面:1、统计在线人数和在线用户2、系统启动时加载初始化信息3、统计网站访问量4、记录用户访问路径。

  • 过滤器:Filter是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。


三大器在springboot中使用时,首先实现相应的接口定义类,然后通过配置类将其加入到spring容器中,从而实现相应的功能。本文重点讲拦截器的使用

一、 拦截器类


public class MyInterceptor implements HandlerInterceptor {
    //在请求处理之前进行调用(Controller方法调用之前
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("preHandle被调用");
        Map map =(Map)httpServletRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
        System.out.println(map.get("name"));
        System.out.println(httpServletRequest.getParameter("username"));
        if(map.get("name").equals("zhangsan")) {
            return true;    //如果false,停止流程,api被拦截
        }else {
            PrintWriter printWriter = httpServletResponse.getWriter();    
            printWriter.write("please login again!");    
            return false; 
        }
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle被调用");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("afterCompletion被调用");
    }
}

二、配置类


@Configuration
public class MywebConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/zxc/foo").setViewName("foo");
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()) 
                .addPathPatterns("/asd/**"); 
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public FilterRegistrationBean filterRegist() {
        FilterRegistrationBean frBean = new FilterRegistrationBean();
        frBean.setFilter(new MyFilter());
        frBean.addUrlPatterns("/*");
        System.out.println("filter");
        return frBean;
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public ServletListenerRegistrationBean listenerRegist() {
        ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean();
        srb.setListener(new MyHttpSessionListener());
        System.out.println("listener");
        return srb;
    }
}

三、控制层

@Controller
public class UserController {

    private final Logger logger = LoggerFactory.getLogger(UserController.class);

    @Value("${application.message:Hello World}")
    private String message ;

    @GetMapping("/asd/{name}")
    public String welcome(@PathVariable String name,Map<String, Object> model) {
        model.put("time", new Date());
        model.put("message", this.message);
        return "welcome";
    }

    @RequestMapping("/login")
    @ResponseBody
    public Object foo() {
        logger.info("打印日志----------------------");
        return  "login";
    }
    
    @RequestMapping("/index")
    @ResponseBody
    public Object index(HttpServletRequest request) {
        HttpSession  session = request.getSession(true);
        session.setAttribute("zxc", "zxc");
        return  "index";
    }

    @RequestMapping("/online")
    @ResponseBody
    public Object online() {
        return  "当前在线人数:" + MyHttpSessionListener.online + "人";
    }
}

节选自https://www.cnblogs.com/hhhshct/p/8808115.html

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数 本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。 阅读详情

相关推荐

flowable表中文注释-表结构-主要表结构字段注释-sql脚本

flowable表结构中文注释,主要表结构字段注释,sql执行脚本,包含MySQL版和Oracle版sql脚本。

bushinakeshu的博客 1070

j2ee中如何拦截jsp页面?

加filter: public class RightFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, Se...

weixin_33743661的博客 308

腾讯混元3D世界模型2.0实战:从AI生成到Unity/UE引擎集成全指南

生成式AI正在重塑3D内容创作流程,其核心原理是通过大语言模型理解自然语言描述,并驱动多阶段生成流水线自动创建3D资产与场景。这项技术为游戏开发、虚拟仿真和数字孪生领域带来了革命性的效率提升,能够将传统需要数周的美术协作流程压缩至几分钟。在实际应用中,开发者需要掌握本地环境部署、模型推理优化以及生成资产与主流游戏引擎的集成工作流。本文以腾讯开源的混元3D世界模型为例,详细解析如何将AI生成的场景通过插件高效导入Unity和Unreal Engine,并针对光照烘焙、材质调整、性能优化等工程实践问题提供解决方

cnracht8153的博客 1396

SpringBoot项目中过滤器Filter的配置

关于springboot中filter的两种配置方法

m0_66607230的博客 8311

从零到一:KUKA机械臂与ROS的工业级通讯协议深度解析

本文深度解析KUKA机械臂与ROS的工业级通讯协议,重点对比EKI与RSI两种核心接口的技术特点与应用场景。详细介绍了网络架构设计、数据包解析机制及ROS-I集成方法,并提供实时性能优化与故障排除策略,为工程师实现高可靠性工业自动化集成提供完整解决方案。

2a4s6d8f0g的博客 296

Petalinux 2021.2 下 Qt组件编译报错?手把手教你修改bb文件搞定qt3d/qtquickcontrols2

本文详细解析了Petalinux 2021.2环境下Qt组件(如qt3d、qtquickcontrols2)编译报错的解决方案。通过修改bb文件或使用bbappend文件覆盖,有效解决`petalinux-build --sdk`命令执行时的源码获取失败或哈希校验不匹配问题,并提供验证与调试技巧,帮助开发者快速修复构建流程中断问题。

weixin_29188997的博客 216

SpringBoot搭建笔记以及常见问题

一、spring、springMvc、springBoot和springCloud的联系与区别 https://blog.csdn.net/alan_liuyue/article/details/80656687 Spring Boot实现了自动配置,降低了项目搭建的复杂度。 众所周知Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。Spri...

m0_37027631的博客 1755

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 395

FilterRegistrationBean.addUrlPatterns 过滤器不生效可能原因分析

项目使用 FilterRegistrationBean 创建 Filter Bean 过滤器的时候,发现请求并没有被拦截过滤,完全没有作用,经过分析后发现...

张小凡 4775

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

56、CAN总线RC低通滤波器截止频率计算与实战

本文详细探讨了CAN总线RC低通滤波器的设计与应用。作者通过实际项目案例,分析了CAN总线噪声频谱特性,提出截止频率计算的"黄金法则",强调需考虑收发器输入阻抗的并联效应。文章给出RC参数选择的经验值(R=100Ω-1kΩ,C=10pF-100pF),并指出PCB布局的关键要点:RC应紧贴收发器引脚,电容接地端需直接连接地平面。最后建议结合示波器和眼图验证效果,并提醒RC滤波器只是抗干扰方案的一部分,良好的PCB布局设计才是根本。

2401_88858637的博客 71

过滤器和监听器

过滤器:简介 JavaWeb的三大组件 组件 作用 实现接口 Servlet 小应用程序,在JavaWeb的服务器中主要做为控制器来使用 可以处理用户的请求并且做出响应 javax.servlet.Servlet Filter 过滤器,对用户发送的请求或响应进行集中处理,实现请求的拦截 javax.servlet.Filter Listener 监听器,在某些框架中会使用到监听器,如:Spring框架 在Web执行过程中,引发一些事件,对相应事件进行处理。主要是监听Servl

qq_45638271的博客 941

《四》:LBE,VR 大空间系列——Pico的空间扫描方式

(这里有个选项叫高精度扫描模式,这个功能在下方详细补充)系统会根据绘制的顶点,将区域分割成若干个4X4米的小方格,我们只需要根据提示,首先进入一个方格子空间内部,然后依次凝视每个区域上下左右前后六个面的小方格组,每一面4个,直至全部消失, 消失后地面会出现一个方形行走路径,我们沿着边缘正或反走一圈即可,完成后此块区域即自动消失。不过由于pico有一个高精度扫描圈,如图加粗的圆环,这个圆环的意思是在在内部的区域扫描精度较高,越远离原点的区域误差越大,所以为了更有效的利用,建议原点设置在场地中心区域。

unitygroup的博客 2888

全面了解SpringBoot拦截器

拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处理。拦截器可以在请求到达目标处理器之前、处理器处理请求之后以及视图渲染之前执行特定的操作。拦截器的主要目的是在不修改原有代码的情况下,实现对请求和响应的统一处理。本文详细介绍了SpringBoot中的拦截器,包括拦截器的概念、作用、实现方式、执行顺序、生命周期以及高级应用。我们还探讨了拦截器的性能优化策略和常见问题。希望本文能帮助您更好地理解和使用SpringBoot中的拦截器。

万猫学社 2万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

springboot之拦截器的几种配置

其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。下面主要介绍两种常用的拦截器: 一、基于URL实现的拦截器: public class LoginInterceptor extends HandlerInterceptorAdapter{ /** * 在请求处理之前进行调用(Controller方法调用之前) * 基于URL实现的拦截器 * @param request * @param respons

Jay的博客 5536

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

springboot 配置拦截器超详细介绍

其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。 下面主要介绍两种常用的拦截器: 一、基于URL实现的拦截器: publicclassLoginInterceptorextendsHandlerInterceptorAdapter{ /** *在请求处理之前进行调用(Controller方法调用之前) *基于URL实现的拦截器 *@paramreques...

awodewen的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springboot|springboot配置拦截器

springboot配置拦截器在springboot中配置拦截器大体上分为以下几步1.引入相关的依赖2.新建拦截器3.配置拦截器Bean虽然网上有很多配置方法,但是我更倾向于官方文件的配...

微笑的小小刀 2526

springboot配置拦截器

1、拦截器代码(需要springboot扫描到注解) @Component public class InitInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(InitInterceptor.class); /** ...

一个人的世界 7922

springboot:多个拦截器的配置

springboot:多个拦截器的配置 springboot中实现拦截器的俩种方式,分别为实现HandlerInterceptor接口和使用servlet的filter拦截器 一、实现HandlerInterceptor接口 1、创建俩个类实现HandlerInterceptor接口 自定义拦截器HandlerInterceptor会实现三个方法 preHandle:调用Controller某个方法之前 postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了

拒绝熬夜啊的博客 7321

springboot中配置拦截器及拦截器顺序详解

springboot中配置拦截器及拦截器顺序详解

Motionlesstar的博客 3716

SpringBoot拦截器详细配置

SpringBoot配置拦截器 一、yml文件配置 path: include: - /*/* exclude: - /swagger-ui.html/** - /v2/** - /user/login - /dev/** - /test/** 二、拦截器Config读取yml文件信息 @Compon...

only one 2269

Springboot配置拦截器

Springboot配置拦截器(登录拦截) 1.编写拦截器实现类,实现接口 HandlerInterceptor,重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码(就是自己拦截器拦截时做什么处理) 注意这里环境为springboot为2.1版本 public class AdminInterceptor implements HandlerInterceptor { /**...

lin_dark的博客 2599

springboot中配置了拦截器未生效

springboot中配置了拦截器未生效 配置代码: 1、定义拦截器 public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, O...

qq_39007031的博客 4859

SpringBoot整合Shiro之拦截器配置

SpringBoot整合Shiro之拦截器配置   springboot整合shiro应用 https://www.cnblogs.com/ll409546297/p/7815409.html 1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都...

行知致简的专栏 6423

SpringBoot学习笔记10-SpringBoot 使用拦截器(配置特定的url请求会进入拦截器)

SpringBoot 使用拦截器步骤为: 1、按照Spring mvc的方式编写一个拦截器类; 创建一个interceptor包 LoginInterceptor: package com.springboot.web.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servle

pin-csdn的博客 3702

什么是拦截器?拦截器如何配置?

今天这篇文章来介绍一下拦截器在SpringBoot中的如何自定义及如何配置的,拦截器的具体作用和应用场景。 SpringBoot版本 本文基于的Spring Boot的版本是2.6.7 。 什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它主要用于拦截用户请求并作出相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。 工作原理 一个拦截器,只有preHandle方法返回true...

m0_69860228的博客 1万+
上一篇: SpringBoot学习笔记(10)-使用Gradle和Maven将项目打包
下一篇: SpringBoot学习笔记(12)-配置UTF-8字符集
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值