• Spring Boot(七)


    SpringBoot MVC功能拓展
    有时候我们需要对SpringBoot MVC的功能进行扩展,如添加自定义拦截器、ViewController、静态资源映射、消息转换器、视图控制器等。 springboot官方对于mvc的扩展时,建议我们实现 WebMvcConfigurer 接口,并且要将该实现类加入到容器中。
    WebMvcConfigurer接口其实是spring的一种内部配置方式,采用java Bean的形式代替传统的xml配置形式,可以自定义一些Handler,Interceptor,ViewResolver, MessageConverter等
    注:这里不实现任何接口方法也不会报错。因为jdk1.8之后,接口支持默认实现。
    在这里插入图片描述

    一般把此类Config配置类,放置在的 config 包下。
    如果想对Spring MVC完全控制,你可以添加自己的 @Configuration 注解 @EnableWebMvc ,这个时候springmvc的默认配置全部失效,都需要自己配置。

    定制静态资源映射:
    在 MyWebConfig 类中重写 addResourceHandlers 方法
    1、在 resource 目录下添加 myStatic 目录。
    2、分别在 static、 myStatic以及 D盘z目录下新建hello.js。hello.js中注释记录各自的路径:
    static/hello.js:
    在这里插入图片描述

    myStatic/hello.js:
    在这里插入图片描述

    D:\z\hello.js:
    在这里插入图片描述

    3、在 MyWebConfig 类中重写 addResourceHandlers 方法。
    在这里插入图片描述

    注意:如果前后映射的url一致,后添加的会覆盖前面添加的。如果添加的URL为 /** 会覆盖springboot 默认的资源映射规则。
    下面这种写法,就只有 file:///D:/z/ 有效
    在这里插入图片描述

    也可以在同一个URL映射下添加多个资源路径,此时,要避免出现同名资源文件。如果有同名的文件,资源覆盖的情况
    在这里插入图片描述

    定制ViewController
    注意:需要引入Thymeleaf依赖。
    1、在templates目录下添加 myIndex.html:
    在这里插入图片描述

    2、在 MyMvcConfig 中重写 addViewControllers 方法
    在这里插入图片描述

    SpringBoot MVC拦截器 Interceptor
    自定义拦截器MyInterceptor,需要实现HandlerInterceptor,重写三个方法
    preHandle(在请求方法处理之前进行调用),此方法返回值决定此次请求是否拦截。ture 放行、false拦截
    postHandle(请求方法处理之后进行调用,但是在视图被渲染之前)
    afterCompletion(在整个请求方法结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作))
    HandlerInterceptor拦截的是controller
    自定义拦截器,直接放行。
    跨域处理(CORS)
    出于安全性,浏览器限制脚本内(多数情况指ajax)发起的跨源HTTP请求。这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头(也就是除非网站本身允许你跨域访问)。
    简单说A应用只能访问A应用后台传来数据,B应用只能访问B应用后台传来的数据,如果A应用用Ajax获取数据时的URL地址中的协议、端口、域名其中有一个和B应用对应的话,则是A应用跨域了想获取B应用数据,是不允许的。这里的不允许是指不允许你获取请求体内容,并不是不许请求。这是出于浏览器的同源策略限制。
    同源策略(Sameoriginpolicy)是一种约定,所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)它是浏览器最核心也最基本的安全功能,如果缺少了 同源策略,则浏览器的正常功能可能都会受到影响。

    1. 同源策略是浏览器最核心也是最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下, 不能读写对方的dom、cookie、session、ajax等操作的权限资源。
    2. 同源有三个条件:协议、域名、端口相同
      一般场景
      前后端分离分别部署在多台服务器上。前端ajax请求数据
      SpringBoot解决跨域问题
      在SpringBoot主要分全局跨域配置和局部跨域配置。
      全局跨域配置
      在 WebMvcConfigurer 的实现类 MyMvcConfig 中重写 addCorsMappings 方法:
      在这里插入图片描述在这里插入图片描述

    局部跨域配置
    局部跨域配置使用 @CrossOrigin 注解,可以用在控制器类和方法上:
    在控制器(类上)使用@CrossOrigin注解,表示该控制器的所有方法允许跨域
    在控制器的某一方法上使用@CrossOrigin注解,表示该方法允许跨域
    @CrossOrigin 注解的参数与全局配置中的基本一致

  • 相关阅读:
    “蔚来杯“2022牛客暑期多校训练营5,签到题KBGHFCD
    “中国国安部紧急警告”!境外公司利用加密货币诱使人员非法采集空间数据!当心不慎成“帮凶”!
    Raspberry Pi 5 新平台 新芯片组
    MySQL主从复制与读写分离
    npm包管理相关命令
    研究生如何学习与科研的几点建议——来自一枚菜博的愚见
    【Python】解决Python报错:ModuleNotFoundError: No module named ‘xxx.yyy‘
    LeetCode50天刷题计划第二季(Day 23 — 重排链表(16.20- 17.00)
    推荐系统实战3——推荐系统中Embedding层工作原理浅析
    SpringMVC(一、快速入门)
  • 原文地址:https://blog.csdn.net/weixin_47799089/article/details/126216343