一、创建自己的拦截器,通过实现HandlerInterceptor接口,重写接口的三个方法,

  preHandle(),预处理回调方法,实现处理器的预处理,如:登录检查,都是在请求controller层之前执行,

  postHandle(),后处理回调方法,实现处理器的后处理,但是要在渲染视图之前

  afterCompletion(),整个请求处理完毕回调方法,要在整个视图渲染完毕后回调

  

import com.impte.study.domain.po.User;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@Component
public class LoginInterceptor implements HandlerInterceptor {//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。HttpSession session = request.getSession();//这里的User是登陆时放入session的User user = (User) session.getAttribute("user");//如果session中没有user,表示没登陆if (user == null){//这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉//当然你可以利用response给用户返回一些提示信息,告诉他没登陆return false;}else {return true;    //如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口
        }}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}

二、注册自己创建的拦截器,实现WebConfigurer接口

import com.impte.study.config.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfigurer implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;// 这个方法是用来配置静态资源的,比如html,js,css,等等
  @Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {}// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
  @Overridepublic void addInterceptors(InterceptorRegistry registry) {// addPathPatterns("/**") 表示拦截所有的请求,// excludePathPatterns("/login", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register");}
}

原文链接:

https://blog.csdn.net/qq_30745307/article/details/80974407

  

转载于:https://www.cnblogs.com/zzb-yp/p/11512126.html

实例篇——springboot自定义拦截器相关推荐

  1. 玩转springboot:实现springboot自定义拦截器

    一.前言 在javaee中,我们经常使用filter来做拦截器,后来有了springmvc,我们使用HandlerInterceptor进行拦截,springmvc的拦截器查看这篇文章,现在有了spr ...

  2. springboot 自定义拦截器 防止恶意请求

    该例子需要用到 redis 在applocation.properties中加入redis的配置信息 server.port=8081# Redis数据库索引(默认为0) spring.redis.d ...

  3. SpringBoot自定义拦截器

  4. springboot项目拦截器中获取接口返回数据_Spring Boot自定义Annotation实现接口自动幂...

    在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重 ...

  5. java interceptor用法_java自定义拦截器用法实例

    本文实例讲述了java自定义拦截器及其用法.分享给大家供大家参考.具体如下: LoginInterceptor.java文件如下: package com.tq365.util; import jav ...

  6. springboot+shiro自定义拦截器互踢问题

    shiro自定义拦截器继承AccessControllerFilter,实现session互踢机制. 应用场景: 我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状 ...

  7. Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】

    什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...

  8. SpringBoot中自定义拦截器

    场景 自定义拦截器,通过继承WebMvcConfigureAdapter然后重写父类中的方法进行扩展. 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZH ...

  9. 【学习】SpringBoot之自定义拦截器

    /*** 自定义拦截器**/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapter ...

  10. springboot-2.2.5中自定义拦截器、静态资源映射、视图控制器和其他功能

    在spring-boot-2.2.5中对MVC自动配置类进行的更改,之前的WebMvcConfigurerAdapter类声明为过时的,现在进行自定义扩展需要实现WebMvcConfigurer类重写 ...

最新文章

  1. Centos学习笔记之grep命令
  2. 公钥密码-非对称加密算法
  3. 深蓝学院《从零开始手写VIO》作业六
  4. linux ubuntu下ffmpeg的安装
  5. MyEcplise中SpringBoot怎样定制启动banner?
  6. 数据库时间字段排序问题
  7. live555 源码分析: DESCRIBE 的处理
  8. 【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)
  9. C++程序员必需的修养
  10. 小米随身wifi的linux驱动,小米随身wifi驱动
  11. keil5怎么放大字体_keil4调节字体 keil字体放大快捷键
  12. Fujitsu(富士通)扫描仪——fi-6130z 无感安装设置
  13. SecureCRT中文汉化版和永久免费激活。
  14. RAID Introduction
  15. 【问题记录】git报错:[remote rejected] (pre-receive hook declined)
  16. Unity中实现VR摄像机
  17. Basic Blocks
  18. java 立体几何体中心点,高中数学立体几何重心考点的解题技巧_招生指南
  19. 计算机保研个人简介,保研个人简历模板
  20. 三种方式让 Android WebView 支持文件下载

热门文章

  1. 简单的聊天应用程序(多客户端聊天服务器) from multithread
  2. 带宽和最高速率之间的换算
  3. 什么是最佳的视频用户体验?阿里云视频服务四大体验优化实践
  4. day20 python常用模块
  5. 解决atomikos在oracle应用中的XA事务异常 Error in recovery
  6. 第二届世界智能大会,看大咖眼中的智能时代
  7. android 内存泄漏问题【转】
  8. OCP考点实战演练02-日常维护篇
  9. 在电源的输入端串一个二极管的作用是什么?
  10. 小强的HTML5移动开发之路(32)—— JavaScript回顾7