spring项目实战(一):拦截器的实现

拦截器的应用:日志记录、权限检查、参数校验

1、添加拦截器
@Configuration
public class ResourcesConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
        registry.addInterceptors(userInfoInterceptors).addPathPatterns("/user/list")
    }
}
  • Spring加载并初始化@Configuration标记的类(同理,@Controller@Service@Component标记的类也会初始化)

  • Spring扫描实现WebMvcConfigurer的类,调用addInterceptors方法,设置拦截器及其拦截规则

    • addInterceptors 方法用于向Spring的拦截器注册表中添加拦截器。以便在请求处理前后执行一些操作

      添加repeatSubmitInterceptor拦截器,防止重复提交

      添加userInfoInterceptors拦截器,进行运管后台用户权限校验

    • addPathPatterns 方法定义了哪些请求路径应该被相应的拦截器拦截

      repeatSubmitInterceptor拦截器匹配/**全路径

      mssUserInfoInterceptors拦截器仅匹配/user/list路径

2、编写拦截器
@Component
public class MssUserInfoInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        ...
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        ...
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        ...
    }
}
  • preHandle:在请求处理之前进行调用(Controller方法调用之前)。
  • postHandle:在请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)。
  • afterCompletion:在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要用于资源清理工作)。
3、实现拦截器和切面的差异

关注点的范围不同:

  • 拦截器: 主要用于拦截请求的处理流程,它可以在请求的预处理、后处理以及响应的渲染之前进行操作。
  • 切面: 更广泛地用于拦截应用程序中的方法调用,不仅仅局限于请求的处理。切面能够横切整个应用程序,包括业务逻辑的不同部分。

作用对象不同:

  • 拦截器: 作用于Spring MVC框架中的Controller层,可以用于处理HTTP请求。
  • 切面: 作用于Spring框架中的IoC容器,可以拦截任何Spring Bean的方法调用。

实现方式不同:

  • 拦截器: 在Spring MVC中通过实现HandlerInterceptor接口来创建拦截器,配置在WebMvcConfigurer中。
  • 切面: 通过使用注解或XML配置,在Java类中定义一个切面,通常使用@Aspect注解。

功能不同:

  • 拦截器: 用于处理HTTP请求的一些预处理和后处理,如身份验证、日志记录等。
  • 切面: 更强大,可以捕获方法调用前、后、异常抛出等时机,用于实现横切关注点,如日志、事务管理、性能监控等。

连接点的概念:

  • 拦截器: 处理的连接点(Join Point)主要是在请求的处理流程中,如Controller的方法调用前后。
  • 切面: 可以处理更广泛的连接点,包括方法的调用、对象的创建等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值