前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三.Springboot配置跨域

三.Springboot配置跨域

作者头像
十分钟空间
发布2022-08-17 14:13:45
3920
发布2022-08-17 14:13:45
举报
文章被收录于专栏:Springboot框架学习

Springboot配置跨域有很多种方式,今天我们来看一下有哪几种方式,第一种方法还是比较常见的。

一.过滤器进行全局配置统一跨域配置方法

     使用过滤器和拦截器方法来统一配置跨域请求性能是差不多,方便的地方是在这一个方法统一配置之后,就可以方便的使用后台方法了,但是也有个缺点,如果你不是设置为私有的方法,在controller里能够看到的代码在服务器外部都可以被访问到。

代码语言:javascript
复制
package com.tms.tblog.infrastructure.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/***
 * 配置跨域
 */
@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1允许任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 2允许任何头
        corsConfiguration.addAllowedHeader("*");
        // 3允许任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }
}

二.使用注解@CrossOrigin 可以实现单个Controller类跨域访问或者单个方法跨域

代码语言:javascript
复制
package com.ten.ms.tmsframework.sys.controller;


import java.io.File;
import java.io.FileOutputStream;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 测试跨域
 */
@CrossOrigin
@RestController
@RequestMapping("/test/test")
public class TestController {

    @Resource
    private testService testService;


    @RequestMapping(value = "/gettestList", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public boolean gettestList(@RequestBody testPageInvo testPageInvo) {
        return true;
    }
}

三.拦截器进行全局配置统一跨域配置方法

    使用拦截器来配置跨域,好像WebMvcConfigurerAdapter这个类有些方法已经过时了,这个还是尽量别用了,用不好再出问题了。

代码语言:javascript
复制
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter  {
    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }

    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/**")  
                .allowCredentials(true)  
                .allowedHeaders("*")  
                .allowedOrigins("*")  
                .allowedMethods("*");

    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**").addResourceLocations("file:" + "upload");
        super.addResourceHandlers(registry);
    }

    /**
     * 用于处理编码问题
     *
     * @return
     */
    @Bean
    public Filter characterEncodingFilter() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return characterEncodingFilter;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Springboot配置跨域有很多种方式,今天我们来看一下有哪几种方式,第一种方法还是比较常见的。
  • 一.过滤器进行全局配置统一跨域配置方法
  • 二.使用注解@CrossOrigin 可以实现单个Controller类跨域访问或者单个方法跨域
  • 三.拦截器进行全局配置统一跨域配置方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档