springboot 拦截器与servlet的过滤器

springboot 是spring框架的二次升华,简化了配置,提高了开发效率。拦截器是spring 提供的基于AOP思想的实现。过滤器filter是servlet的API,比较依赖servlet,他们有不同也有一些相似的地方。

1Filter基于servlet ,主要用于servlet存在的环境。拦截器用于servlet,也可以用于其他环境中。
2Filter是servlet规范来提供支持,拦截器是spring框架来提供支持。
3Filter的使用主要在servlet的前后,拦截器可以深入到每个角落。

时使用拦截器?何时使用过滤器?
1如果是非spring项目,那么不能拦截器,只能用过滤器。
2 如果是处理controller前后,既可以使用拦截器也可以使用过滤器。

下面是springboot里面实现filter的例子

      // 注入spring容器

@Component
// 定义filterName 和过滤的url
@WebFilter(filterName = "my2Filter" ,urlPatterns = "/*")
public class My2Filter implements Filter {br/>@Override
public void init(FilterConfig filterConfig) throws ServletException {

}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("filter2");
}
@Override
public void destroy() {

}

}

接下来实现一个springboot里面的拦截器的例子。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new GlobalInterceptor()).addPathPatterns("/**");
}

}

import cn.vcinema.tool.security.session.SessionValidateResultEnum;
import cn.vcinema.tool.security.session.UserSessionInfo;
import cn.vcinema.tool.security.session.UserSessionUtils;
import com.pumpkin.conf.MallConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GlobalInterceptor implements HandlerInterceptor {

private final static Logger LOGGER = LoggerFactory.getLogger(GlobalInterceptor.class);

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String userId = request.getHeader("user_id");
    String sessionId = request.getHeader("session_id");
    String deviceId = request.getHeader("device_id");
    LOGGER.info("headers:user_id=" + userId + ",session_id=" + sessionId + ",device_id=" + deviceId);
    UserSessionInfo info = new UserSessionInfo(userId, sessionId, deviceId);
    SessionValidateResultEnum resultEnum = UserSessionUtils.validateSession(MallConfig.getRunMode(), info);

    return true;
}

}

springboot 拦截器与servlet的过滤器

原文地址:https://blog.51cto.com/chenhva/2397931

时间: 2024-10-18 03:54:10

springboot 拦截器与servlet的过滤器的相关文章

SpringBoot 拦截器/过滤器/监听器

SpringBoot 拦截器 | 过滤器 | 监听器 1.拦截器:拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略.一般用于拦截用户登录,用户验证等. 2.过滤器:它可以对客户的请求进行处理.处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止.一般用于对数据的处理. 3.监听器: 配置拦截器: 实现的 HandlerInterc

SpringBoot拦截器中service或者redis注入为空的问题

原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bea

SpringBoot拦截器中Bean无法注入(转)

这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!"Application类&

SpringBoot 拦截器(Interceptor)的使用

拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意过区别,反正就是起检查作用的, 仔细阅读 过滤器(filter)和拦截器(interceptor)的区别 后明白了不少 最重要的要记住他们的执行顺序: 先filter 后 interceptor 过滤前-拦截前-action执行-拦截后-过滤后 在了解上面的信息后,本文讲interceptor的使用

SpringBoot拦截器的注册

(1).编写拦截器 1 package cn.coreqi.config; 2 3 import org.springframework.util.StringUtils; 4 import org.springframework.web.servlet.HandlerInterceptor; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 i

SpringBoot拦截器

在实际开发中,总存在着这样的场景,比如拦截请求的ip地址,或者在所有的请求都返回相同的数据,如果每一个方法都写出相同数据固然可以实现,但是随着项目的变大,重复的代码会越来越多,所以在这种情况我们可以用拦截器来实现. 最近一直在研究thymeleaf,越发的感觉这个很好用,所以这篇文章也选择结合这个来使用. 新建项目,pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo

springboot拦截器注入bean失败实例

如题,在spring拦截器中注入了一个service,结果运行时报了空指针: 2020-01-03 09:26:33.646 |-DEBUG [http-nio-9988-exec-3] org.springframework.web.servlet.DispatcherServlet [1100] -| Failed to complete request: java.lang.NullPointerException 2020-01-03 09:26:33.648 |-ERROR [http

Spring-Boot:拦截器注解范例

package com.example.aop; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Cre

springboot拦截器实现

package webapp.dao.bcf; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.config.annotat