Spring Boot Filter、Interceptor、AOP 的使用场景与选型

Spring Boot中Filter、Interceptor与AOP的对比与应用场景 在Java Web开发中,成熟的工程体系往往借助多个层次的技术组件来横切处理业务逻辑。Filter、Interceptor与AOP正是Spring Boot项目中最常被提及的三种拦截机制,它们分别基于Servlet规范、Spring MVC框架以及Spring容器代理模型实现,执行时机和管辖范围层层递进。理解三者的核心原理与调用顺序,能帮助开发者合理设计接口日志、耗时统计、权限校验与防重复提交等通用能力。以接口日志为例,Filter适合收集最原始的请求流量数据,Interceptor可结合HandlerMe 阅读详情

在 Spring Boot 应用程序开发中,Filter(过滤器)、Interceptor(拦截器)和 AOP(面向切面编程)是三种常见的横切关注点实现方式。

它们各有特点和适用场景,正确的选择和使用这些技术对于构建高质量的应用程序至关重要。

一、基本概念与执行顺序

1. Filter(过滤器)

Filter 是 Servlet 规范中定义的组件,位于 Web 容器中,在请求到达 Servlet 之前和响应返回客户端之前进行处理。

@Component
public class LogFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        
        log.info("请求URL: {}", req.getRequestURI());
        
        // 继续执行过滤器链
        chain.doFilter(request, response);
        
        log.info("响应已完成");
    }
}

2. Interceptor(拦截器)

Interceptor 是 Spring MVC 框架提供的组件,位于 DispatcherServlet 之后,Controller 处理之前。

@Component
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
                            Object handler) throws Exception {
        // 在Controller方法执行前调用
        String token = request.getHeader("token");
        if (StringUtils.isEmpty(token)) {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
            return false;
        }
        return true;
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                          Object handler, ModelAndView modelAndView) throws Exception {
        // 在Controller方法执行后,视图渲染前调用
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
                               Object handler, Exception ex) throws Exception {
        // 在整个请求完成后调用
    }
}

3. AOP(面向切面编程)

AOP 是 Spring 框架提供的一种编程范式,可以在不修改源代码的情况下为方法添加功能。

@Aspect
@Component
public class PerformanceAspect {
    @Around("execution(* com.example.service.*.*(..))")
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        
        Object result = joinPoint.proceed();
        
        long executionTime = System.currentTimeMillis() - start;
        log.info("{} 执行耗时 {} ms", joinPoint.getSignature(), executionTime);
        
        return result;
    }
}

执行顺序

请求处理的顺序为:Filter -> Interceptor -> AOP -> Controller -> AOP -> Interceptor -> Filter

二、使用场景对比

特性

Filter

Interceptor

AOP

作用范围

所有请求

匹配的URL请求

指定的方法

实现层面

Servlet容器

Spring MVC

Spring容器

能否获取方法及类信息

否

是

是

应用场景

请求过滤、字符编码等

用户认证、日志记录等

事务、日志、权限等

三、使用场景分析

1. Filter 适用场景

请求/响应预处理:如字符编码设置、CORS跨域处理 请求内容转换:如请求体解析、加解密 身份验证:如JWT令牌验证 日志记录:记录所有请求的访问日志 敏感信息过滤:过滤敏感词汇

@Component
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }
}

2. Interceptor 适用场景

用户认证:检查用户是否已登录 权限控制:检查用户是否有权限访问特定资源 性能监控:监控控制器方法执行时间 日志记录:记录请求处理过程中的详细信息 国际化处理:根据请求设置语言环境

@Component
public class PermissionInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
                            Object handler) throws Exception {
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        RequiresPermission annotation = handlerMethod.getMethodAnnotation(RequiresPermission.class);
        
        if (annotation != null) {
            String requiredPermission = annotation.value();
            // 检查用户权限
            if (!hasPermission(request, requiredPermission)) {
                response.setStatus(HttpStatus.FORBIDDEN.value());
                return false;
            }
        }
        
        return true;
    }
    
    private boolean hasPermission(HttpServletRequest request, String permission) {
        // 权限检查逻辑
        return true;
    }
}

3. AOP 适用场景

事务管理:方法执行前开启事务,执行后提交或回滚 方法性能监控:记录方法执行时间 日志记录:记录方法调用的参数和返回值 缓存处理:方法执行前查询缓存,执行后更新缓存 异常处理:统一处理特定异常

@Aspect
@Component
public class CacheAspect {
    @Autowired
    private CacheManager cacheManager;
    
    @Around("@annotation(com.example.annotation.Cacheable)")
    public Object cache(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        Cacheable cacheable = method.getAnnotation(Cacheable.class);
        
        String cacheKey = generateCacheKey(joinPoint, cacheable);
        Object cachedValue = cacheManager.get(cacheKey);
        
        if (cachedValue != null) {
            return cachedValue;
        }
        
        Object result = joinPoint.proceed();
        cacheManager.put(cacheKey, result);
        
        return result;
    }
    
    private String generateCacheKey(ProceedingJoinPoint joinPoint, Cacheable cacheable) {
        // 生成缓存键
        return cacheable.value();
    }
}

四、选型指南

何时选择 Filter:

  1. 需要处理所有的 HTTP 请求
  2. 需要在请求到达控制器之前进行预处理
  3. 处理与 Servlet 规范相关的功能
  4. 需要修改请求或响应对象
  5. 实现框架无关的功能

何时选择 Interceptor:

  1. 需要访问 Spring MVC 特定的功能
  2. 需要访问控制器的上下文
  3. 只需拦截匹配的 URL 请求
  4. 需要灵活的请求拦截配置
  5. 需要多个处理阶段(前置、后置、完成后)

何时选择 AOP:

  1. 需要拦截特定方法的执行
  2. 需要处理业务逻辑层的横切关注点
  3. 需要访问方法的参数和返回值
  4. 需要更细粒度的控制
  5. 非 Web 层的功能增强

五、最佳实践

1. 组合使用

在实际项目中,这三种技术往往会组合使用:

Filter:处理通用的 Web 请求处理,如编码设置、CORS 配置 Interceptor:处理与用户认证、授权相关的功能 AOP:处理业务层面的横切关注点,如日志、性能监控、事务等

2. 性能考虑

  • Filter 和 Interceptor 主要用于 Web 层,每个请求只会经过一次
  • AOP 可能会作用于多个方法,影响更多的调用点
  • 在高并发场景下,应尽量减少 AOP 切面的数量和复杂度

3. 代码组织

将不同横切关注点的实现分离:

  • 认证授权相关的逻辑放在 Interceptor 中
  • 日志、监控等通用功能可以使用 AOP 实现
  • 请求预处理、编码设置等通用功能使用 Filter 实现

六、总结

选择合适的技术取决于具体需求、性能考虑和团队熟悉度。在实际应用中,合理组合使用这三种技术可以构建更加模块化、可维护的应用程序。

对于 Spring Boot 应用程序,推荐遵循"责任分离"原则,根据横切关注点的性质选择最合适的实现方式,让代码结构更加清晰,逻辑更加分明。

SpringBoot中Interceptor和Filter的使用 目录`Interceptor` 拦截器 Interceptor 拦截器 HandlerInterceptor 接口,该接口提供了拦截器的功能,如果自定义拦截器就要实现该接口,HandlerInterceptor 源码如下 public interface HandlerInterceptor { // 处理器执行前方法 default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object 阅读详情

相关推荐

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

过滤器Filter和拦截器Interceptor

这是因为我们在注册过滤器Filter的时候,使用的是new LoginAuthFilter的方式,过滤器是Servlet规范的一部分,而不是Spring框架的组件,需要通过new 关键字创建实例。但是如果你的注册过滤器的类LoginAuthConfig中,还是通过new LoginAuthFilter方法而不是@Autowired注入LoginAuthFilter,你会发现在拦截请求进入LoginAuthFilter中的时候,testServiceImp的bean还是为null。这是我产生的第二个疑问。

BUG指挥课堂 871

附录B:Standard Delay Format(SDF)(上)

本附录将介绍标准延迟标注格式,并说明了如何在仿真中执行反标。 延迟格式描述了设计网表的单元延迟和互连走线延迟,无论设计是用两种主要硬件描述语言(VHDL或Verilog HDL)中的哪一种所描述的。 本章还会介绍仿真的反标(backannotation),STA的反标其实是一个简单直接的过程,其中DUA中的时序弧将由SDF所指定的延迟进行标注。

To the beyond and infinity! 5411

SpringBoot 三种拦截http请求方式Filter,interceptor和aop

SpringBoot 三种拦截http请求方式Filter,interceptor和aop。 这三种拦截方式的拦截顺序是:filter—>Interceptor-->ControllerAdvice-->@Aspect -->Controller; 这三种方式的区别:1.过滤器 过滤器拦截web访问url地址。 严格意义上讲,filter只是适用于web中,依赖于Servlet容器,利用Java的回调机制进行实现。 Filter过滤器:和框架无关,可以控制最初的http请求,

u014496893的博客 2万+

电路仿真软件PSIM简介

PSIM的基本使用操作...

qq_55203246的博客 7179

Ansys Icepak:通过 ECAD 导入和非共形网格划分掌握电子冷却

通过将 Icepak 与 HFSS(用于高频电磁学)、Ansys Mechanical(用于结构分析)和 Ansys Fluent(用于流体动力学)等 Ansys 产品相结合,工程师可以在单个工作流程中仿真电子系统的完整行为,从热和电气动力学到机械和流体动力学。精细网格可以应用于关键区域,而在不太重要的区域使用较粗的网格,从而在不牺牲精度的情况下加快仿真速度。这些功能使 Ansys Icepak 成为从事复杂电子设计的工程师不可或缺的工具,可实现更精确的热分析并缩短开发时间。用于高效仿真的非共形网格划分。

jkh920184196的博客 1394

SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)

从Tomcat、Servlet开始,分享到Spring AOP实现,直接上手框架,缺少Java Web基础的同学可以看看哦

shang_0122的博客 8088

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 404

掌握springboot过滤器,拦截器 ,aop

Spring Boot 中的过滤器(Filter)、拦截器(Interceptor)和 AOP(面向切面编程)都是处理请求的常用技术,但它们在处理请求的时机、范围和方式上有所不同。

干货分享,希望帮助读者不断提升自己的编程技能,解决工作中实际问题,并激发对技术的无限热爱。 1520

STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发 分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。 一、硬件选型 1、 stm32f103c8t6 2、ESP_01 wifi模块 3、其他 二、硬件连接 WSP_01 STM32F103C8T6 RXD PA2 TXD PA3 RES PA4 VCC 3.3

weixin_A13253323604 3万+

微信聊天记录解密,必须是root的手机

手机上安装x-plore软件,将/data/data目录的相关EnMicroMsg.db auth_info_key_prefs.xml拷贝到/storge/emulated/0目录后才可以拷贝到电脑。路径:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml。但是是加密过的 需要解密 解密密码生成规则是手机IMEI+微信UIN md5(32位小写)后的前7位。安卓手机要root测试版本微信要7或者8版本都可以。选择message表。

venus60的专栏 1007

SpringBoot Filter、Interceptor、AOP 的使用场景与选型

选择合适的技术取决于具体需求、性能考虑和团队熟悉度。在实际应用中,合理组合使用这三种技术可以构建更加模块化、可维护的应用程序。对于 Spring Boot 应用程序,推荐遵循"责任分离"原则,根据横切关注点的性质选择最合适的实现方式,让代码结构更加清晰,逻辑更加分明。

m0_73735578的博客 901

基于深度学习的大豆病害检测识别系统:YOLOv10 + UI界面 + 数据集

YOLOv10是一种高效的目标检测算法,能够在保持高精度的同时,提供较快的检测速度。YOLOv10使用了改进的卷积神经网络架构,并在多个计算机视觉任务中表现出色。在本项目中,我们将使用YOLOv10进行大豆病害的检测和分类。本系统利用YOLOv10算法,实现了大豆病害的实时检测和分类。通过结合深度学习和图像处理技术,可以帮助农业领域的专业人员更加高效地识别和诊断大豆病害,提高农作物的生产力与质量。

YOLO 700

spring boot实现AOP,Filter,Interceptor以及3个之间的区别和使用场景

零、测试的项目项目:demo    输入:http://127.0.0.1:8080/demo/hello/springboot进行测试/** * 测试用的 */ @RestController public class Hellotroller { @GetMapping("/hello/{name}") public String hello(@PathVariable ...

3年零6个月 4661

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

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

Spring Boot 中 Filter、Interceptor 和 AOP 的全面对比与应用场景

Filter:容器层守门员,拦所有请求Interceptor:MVC守门员,拦ControllerAOP:方法级增强,拦任意方法。

学亮编程手记 528

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Filter、Interceptor、Spring AOP 的执行顺序详解

本文解析了Spring Boot中Filter、Interceptor和Spring AOP的执行顺序及应用场景。Filter基于Servlet规范,在请求到达DispatcherServlet前执行,适用于全局处理;Interceptor在Controller方法前后执行,适合MVC相关处理;Spring AOP通过代理模式实现方法级别的拦截,适用于业务逻辑横切关注点。三者的执行顺序为:Filter→Interceptor preHandle→AOP→业务逻辑→AOP→Interceptor postHa

ᶻᶻᶻ 枕星河的博客 886

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

spring boot 拦截 以及Filter和interceptor 、Aspect区别

一、通过Filter这个大家很熟悉了吧,这是java规范的一个过滤器,他会拦截请求。在springboot中一般有两种配置方式。这种过滤器拦截并不知道你用的是哪一个Controller处理也不知道你用哪一个方法处理。 过滤器使用的主要是反射 ;拦截器使用的主要是回调 ;AOP使用的主要是动态代理。 一个请求过来 ,先进行过滤器处理,看程序是否受理该请求。过滤器放过后, 程序中的拦截器进行处理,处理完后进入被AOP动态代理重新编译过的主要业务类进行处理 。 Filter:和框架无关,可以控制最初的ht..

lixinkuan的博客 3016

Spring04 - filter和interceptor

Spring04 - filter和interceptor

qq_43350524的博客 1045

过滤器(Filter)和 拦截器(Interceptor)

过滤器(Filter)和 拦截器(Interceptor) 使用和区别

tszc95的博客 9536

Spring Boot Filter、Interceptor、AOP 执行顺序深度拆解与生产实践

本文深入解析了Spring Boot中Filter、Interceptor和AOP三大组件的执行顺序与核心特性。通过洋葱模型可视化展示三者的层级关系:Filter作为Servlet容器层最先执行,Interceptor属于SpringMVC层居中,AOP作为最内层的Bean代理最后生效。文章详细对比了三者在容器归属、拦截粒度和适用场景上的差异,并提供了可运行的代码实现示例,包括全局请求耗时Filter、Token鉴权Interceptor和方法日志AOP。

初入江湖,多多关照 245

Spring Boot 请求处理链路:Filter → Interceptor → AOP → ExceptionHandler 执行顺序详解

Filter 是 Servlet 规范定义的组件,位于整个链路的最外层。职责:请求预处理、响应后处理、通用逻辑(如登录校验、日志记录、跨域处理)配置方式@WebFilter或作用范围:覆盖所有请求,包括静态资源@OverrideSystem.out.println("Filter 执行(请求前)");// 放行,执行后续链路System.out.println("Filter 执行(响应后)");异常抛出时的处理顺序:Controller 抛出异常↓。

圆师傅的博客 449

Spring拦截器(Interceptor)与过滤器

场景优先选择全局请求修改/安全FilterController 级逻辑混合使用Filter 先 + Interceptor 后一句话:Filter 是 Servlet 的门卫,Interceptor 是 Spring MVC 的管家。现在你能轻松配置了!想看完整登录拦截示例代码?或 AOP @Aspect 替代方案?继续问我,超详细教程等着你!执行时机、作用域、功能深度完全不同。

likuoelie的博客 1699

Spring Boot 拦截器(Interceptor)与过滤器(Filter)有什么区别?

过滤器(Filter)是 Servlet 的“大门”,拦截器(Interceptor)是 Spring MVC 的“小门”。Filter:更早、更底层、更通用,但离业务逻辑较远。:更晚、更上层、更灵活,更贴近业务逻辑。

hello! 1007

Spring Boot 三种拦截机制实战:Filter、Interceptor、AOP 到底在哪一层、怎么选

加个统一日志/鉴权/耗时统计,写在哪?」——这是 Spring 项目里几乎天天要做的横切需求。Filter(过滤器)、(拦截器)、AOP(切面)。新手常常随手抓一个就用,结果要么拿不到想要的对象,要么拦截范围不对,要么异常处理踩坑。这三者不是「三选一都能干」,而是分别工作在请求处理的不同层次。搞清楚它们各自能看到什么、拦得住什么,才能选对。

weixin_42662753的博客 203
上一篇: 利用SpringBoot中的RestTemplate实现反向代理
下一篇: SpringBoot+WebSocket实现直播连麦
程序员职业指南
博客等级 码龄4年 2136粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值