java篇-Springboot解决跨域问题的三种方式

这篇具有很好参考价值的文章主要介绍了java篇-Springboot解决跨域问题的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种:添加@CrossOrigin注解

在Controller层对应的方法上添加@CrossOrigin或者类上添加@CrossOrigin  

package com.example.controller;

import com.example.model.Book;
import com.example.service.InBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
public class BookController {

    @Autowired
    private InBookService bookService;

    String message = "";

    @RequestMapping("/queryAllBooks")
    public List<Book> getAllBooks(){

        List<Book> allBooks = bookService.getAllBooks();
        return allBooks;
    }

    @RequestMapping("/addBook")
    public String addBook(@RequestBody Book book){
        //用Mybatis执行insert语句的时候,插入成功会返回1,不成功则会抛出异常,捕获一下异常就好
        try {
            bookService.addBook(book);
            message = "增加用户成功";
        }catch (Exception exception){
            message = "增加用户异常";
        }
        return message;
    }

    @RequestMapping("/updateBookById")
    public String updateBook(@RequestBody Book book){
        //用Mybatis执行insert语句的时候,插入成功会返回1,不成功则会抛出异常,捕获一下异常就好
        try {
            bookService.updateBookById(book);
            message = "更新用户成功";
        }catch (Exception exception){
            message = "更新用户异常";
        }
        return message;
    }


    @RequestMapping("/deleteBookById")
    public String deleteBookById(@RequestBody Map<String,Integer> params){

        //用Mybatis执行insert语句的时候,插入成功会返回1,不成功则会抛出异常,捕获一下异常就好
        try {
            Integer id = params.get("id");
            bookService.deleteBookById(id);
            message = "删除用户成功";
        }catch (Exception exception){
            message = "删除用户异常";
        }
        return message;
    }

    @RequestMapping("/getBookById")
    public Book getBookById(@RequestBody Map<String,Integer> params){

        int id = params.get("id");
        Book b = bookService.getBookById(id);
        return b;
    }

}
第二种:添加CORS过滤器

新建配置类CorsConfig,创建CorsFilter过滤器,允许跨域

@Configuration
public class CorsConfig {
    // 跨域请求处理
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许所有域名进行跨域调用
        config.addAllowedOrigin("*");
        //允许所有请求头
        config.addAllowedHeader("*");
        //允许所有方法
        config.addAllowedMethod("*");
        // 添加映射路径,我们拦截一切请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
 第三种:实现WebMvcConfigurer,重写addCorsMappings方法
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    // 跨域请求处理
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry
                // 设置允许跨域的路径
                .addMapping("/**")
                // 设置允许跨域请求的域名
                .allowedOriginPatterns("*")
                // 是否允许证书
                .allowCredentials(true)
                // 设置允许的方法
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                // 设置允许的header属性
                .allowedHeaders("*")
                // 跨域允许时间
                .maxAge(3600);
    }
}

全局配置有可能出现跨域失败的情况,改为过滤器解决跨域问题之后就解决了,在此附上过滤器跨域代码:

@Component
public class CorsFilter implements Filter {
 
    //销毁时候调用的方法
    @Override
    public void destroy() {
 
    }
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
 
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
 
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "*");
 
        chain.doFilter(req, res);
 
    }
 
    //初始化调用的方法
    //当服务器 被启动的时候,调用
    @Override
    public void init(FilterConfig arg0) throws ServletException {
 
    }
}

参考:

Springboot解决跨域问题的三种方式_springboot跨域注解-CSDN博客文章来源地址https://www.toymoban.com/news/detail-856588.html

到了这里,关于java篇-Springboot解决跨域问题的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot实现分页的三种方式

    一 自己封装Page对象实现 博客链接 二 使用sql实现分页 2.1 场景分析 前段传递给给后台什么参数? 当前页码 currentPage 每页显示条数 pageSize 后台给前端返回什么数据? 当前页数据 List 总记录数 totalCount 2.2 前段代码 2.3 后端代码 PageBean mapper service impl controller 三 使用PageHelper插件

    2024年02月10日
    浏览(51)
  • SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式

    仅仅适用在controller方法上。当Spring接收到HTTP请求时,会寻找一个合适的方法来处理该请求。如果该方法参数上标注了@RequestMapping或@Get、@Post等注解,Spring就会将HttpServletRequest对象注入到该参数中。 适用于所有的bean 通过调试可以看到,注入的Reques是一个代理类,而这个被代

    2024年02月19日
    浏览(49)
  • Springboot中使用线程池的三种方式

    前言 多线程是每个程序员的噩梦,用得好可以提升效率很爽,用得不好就是埋汰的火葬场。 这里不深入介绍,主要是讲解一些标准用法,熟读唐诗三百首,不会作诗也会吟。 这里就介绍一下springboot中的多线程的使用,使用线程连接池去异步执行业务方法。 由于代码中包含详

    2024年02月08日
    浏览(47)
  • SpringBoot导出Word文档的三种方式

    1、直接在Java代码里创建Word文档,设置格式样式等,然后导出。(略) 需要的见:https://blog.csdn.net/qq_42682745/article/details/120867432 2、富文本转换后的HTML下载为Word文档。相当于把HTML转为Word导出 3、使用模板技术导出。固定格式、可以写入不同数据 其他: springboot版本:2.7.11 导

    2024年02月02日
    浏览(55)
  • SpringBoot获取Request请求的三种方式

    Request对象包含了请求的各种信息,比如请求方法、请求URL、请求参数、请求内容等等,这些信息可以供服务器进行处理和响应。那么在SpringBoot中,怎么才能获取到Request对象? 本文将介绍三种方法,并提示例参考。 一、直接在Controller方法参数上注入HttpServletRequest 这是最常用

    2024年02月04日
    浏览(56)
  • 分享后端解决跨域问题的三种方案

    跨源资源共享( CORS——Cross-Origin Resource Sharing ,跨源资源共享,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来

    2024年02月02日
    浏览(59)
  • SpringBoot+MyBatis批量插入数据的三种方式

    最近导入表格数据时需要同时插入修改大量数据,研究了一下有三种实现方式 1、用for循环调用sql插入数据 这种方式插入大量数据时,效率非常底下,不推荐 2、利用mybatis的foreach来实现循环插入 这种方式插入大量数据时,好处是不用频繁访问数据库,一条sql搞定,效率比较

    2024年02月16日
    浏览(42)
  • SpringBoot实现过滤器Filter的三种方式

    过滤器 Filter 由 Servlet 提供,基于函数回调实现链式对网络请求与响应的拦截与修改。由于基于 Servlet ,其可以对web服务器管理的几乎所有资源进行拦截(JSP、图片文件、HTML 文件、CSS文件等)。 Filter 的生命周期 init(): 初始化Filter 实例,Filter 的生命周期与 Servlet 是相同的,

    2024年02月14日
    浏览(47)
  • idea社区版本创建springboot项目的三种方式

      文章目录 一、前言 一、方式1:spring 官方创建 springboot项目 1、打开在线的 spring initializr 2、选择项目的语言、版本、依赖等 3、 解压源码包,并使用IDEA打开 4、测试接口 二、方式2:社区idea安装Spring插件 1、添加插件 三、方式3:(麻烦)手动maven 创建springboot项目 一、前言

    2023年04月09日
    浏览(87)
  • Springboot接入OpenAi/Chat GPT的三种方式

    由于现在网上的相关教程并不多外加没有使用代理的demo,所以抛砖引玉,写了三种调用方式,分别是直接访问、非官方SDK访问、官方开源的SDK访问 1、导入pom文件(2023.3.30最新版本) 2、入参 这里的TalkDto 还可以入参maxToken,用于返回最大量的数据,官方计算token大小的方式:

    2023年04月19日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包