首页 > 其他分享 >Springboot拦截器的使用

Springboot拦截器的使用

时间:2023-10-29 22:06:52浏览次数:35  
标签:拦截器 Springboot request response referer 使用 println public

1.拦截器(Interceptor) 在Spring Boot中,拦截器是基于Spring MVC框架的一部分,主要用于对控制器方法进行拦截处理。

拦截器是通过实现HandlerInterceptor接口来定义的 其中包括三个主要方法:preHandle、postHandle和afterCompletion。 1.preHandle方法在进入控制器方法之前执行 2.postHandle方法在控制器方法执行后、渲染视图之前执行 3.afterCompletion方法在渲染视图之后执行。

Springboot拦截器的使用_拦截器

1-1.Springboot实现拦截器。 首先拦截器是基于MVC框架的

其中org.springframework:spring-webmvc依赖,有个HandlerInterceptor拦截器的接口类。

1.新建一个实现类继承HandlerInterceptor接口,并且重写接口类里面的三个方法

public class UserInterceptor implements HandlerInterceptor {

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
    
    System.out.println("=======拦截器=======");
    String referer = "";
    if (request.getHeader("referer") != null) {
        referer = request.getHeader("referer");
        int index = referer.indexOf("?");
        if (index != -1) {
            referer = referer.substring(0, index);
        }
        System.out.println(referer);
        System.out.println(request.getRequestURI());
        
	// 这里做拦截处理,和开放处理。
	// 一般情况下是校验用户session来拦截未带session的请求,这里做开放不带session的api请求
    // 这里做个示例。拦截和放行都写一下。
    // 原理非常简单,你return的值为true就是放行,返回false则为拦截
    
    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
    	// 如果请求类型是预检,就放行。流程很简单,举一反三即可
        return true;
    }
   
   	// 如果引号里的UIR等于request.getRequestURI。就设置响应值,返回false拦截该请求
    if ("".equals(request.getRequestURI())) {
        System.out.println("此api占未开放");
        // 设置响应的内容类型
        response.setContentType("application/json");
        // 设置响应的字符编码
        response.setCharacterEncoding("UTF-8");
        // 获取响应输出流
        PrintWriter writer = response.getWriter();
        // 向响应体中写入内容
        writer.println(RespResult.error404("此api占未开放"));
        // 关闭输出流
        writer.close();
        return false;
    }
    // 这里可以写其他关于session的操作。
    return true;
}

}

拦截器写完后是无法使用的。需要注册拦截器并且注入Springboot。 注册拦截器也是基于MVC框架的,所以先建一个类继承WebMvcConfigurer接口,并且重写addInterceptors方法

// 这里需要加上@Configuration定义配置类 // 用于构建bean定义,初始化Spring容器 @Configuration public class InterceptorConfig implements WebMvcConfigurer {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    System.out.println(registry);
    // 这里直接new一个我们的拦截器类。用于注册即可。
    registry.addInterceptor(new UserInterceptor());
}

}

到这里拦截器就可以正常使用,仔细看还是很简单的。

标签:拦截器,Springboot,request,response,referer,使用,println,public
From: https://blog.51cto.com/u_16329794/8081198

相关文章

  • django基础到高手知识笔记总结 共4大模块50页md文档 第2章:django视图和模板的使用
    当你考虑开发现代化、高效且可扩展的网站和Web应用时,Django是一个强大的选择。Django是一个流行的开源PythonWeb框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用完整版笔记直接地址:请移步这里共10章,31子模块,总计18647字工程搭建学习目标......
  • Vuex状态管理常见的几种使用功能场景
    Vuex是一个专为Vue.js应用程序开发的状态管理模式。用于集中管理应用程序的所有组件之间共享的状态,确保状态的一致性和可预测性。使用Vuex的一般步骤如下:1:安装Vuex:使用npm或yarn安装Vuex库。npminstallvuex2:创建VuexStore:在Vue应用程序中创建一个Vuex的store实例,包含了应用程序......
  • iptables 使用总结
       Linux系统的防火墙功能是由内核实现的2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm2.2版内核中,包过滤机制是ipchain,管理工具是ipchains2.4版及以后的内核中,包过滤机制是netfilter,管理工具是iptablesiptables用户态位于/......
  • 使用telnet来调试游戏
    telnet是什么Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统......
  • finalshell在sbt安装目录中使用下面命令创建一个Shell脚本文件,用于启动sbt:
    finalshell在sbt安装目录中使用下面命令创建一个Shell脚本文件,用于启动sbt:vim/usr/local/sbt/sbtlanguage-bash该脚本文件中的代码如下:#!/bin/bashSBT_OPTS="-Xms512M-Xmx1536M-Xss1M-XX:+CMSClassUnloadingEnabled-XX:MaxPermSize=256M"java$SBT_OPTS-jardirname$......
  • Ubuntu环境下docker的安装和基本使用
    docker是一个基于GoLang的应用容器引擎,它轻量级的沙箱化特性让它在服务器运维方面不可或缺。docker的优势和特性本篇不再赘述,着重记录Ubuntu环境下docker快速安装和基本使用。docker引擎本身是跨平台的,在不同Linux、Mac和win环境有不同的实现,而win环境则依托于vbox和hyper-v的虚拟......
  • SpringBoot简介&IDEA在线创建一个SpringBoot项目
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言SpringBoot项目创建有三种方式,分别是在线创建、使用Springinitializr快速创建、和改造Maven工程创建,本期讲的就是如何在线创建一个SpringBoot项......
  • Windows 10中,可以使用以下PowerShell脚本来禁用Internet Explorer的Javascript错误提
    Windows10中,可以使用以下PowerShell脚本来禁用InternetExplorer的Javascript错误提示禁用脚本调试器Set-ItemProperty-Path"HKCU:\Software\Microsoft\InternetExplorer\Main"-Name"DisableScriptDebugger"-Value"yes"禁用每个脚本错误的通知Set-ItemProperty......
  • EDA工具使用+GIT操作+python编程+C语言编程+Riscv相关+TCL操作
    EDA工具使用Verdi覆盖率转网页urg-full64-dirsimv.vdbVerdi加载sessionverdi-ssrsessionFileVcs分部编译额外选项-partcomp:自动分块编译。-fastpartcomp:使用多核计算系统并行部分编译。-pcmakeprof:查看每部分编译占用的时间,方便对时间更久的进行拆分。-partc......
  • 基于SpringBoot框架的教学评价系统-计算机毕业设计源码+LW文档
    摘要随着时代的发展,我国的教育水平在不断的提高,但是很多时候为了更好的提高教学的质量,会让学生对当前的教学进行评价,教育工作者根据学生的评价发现当下教学中的一些不足,从而更好的提高教学质量,为了让教学评价变的更加的方便我们开发了本次的教学评价系统。本系统从用户的角度出......