`

springboot 设置跨域

 
阅读更多

 

首先我们配置上host映射

前端:

 index.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<script th:src="@{/js/jquery.min.js}"></script>
<body>
<h1 th:text="${port}">Hello World</h1>
<button  id="button-click">Button</button>
<script>
    $(function(){
        $("#button-click").click(function(){
            $.ajax({
                url : "http://myproject.dev.cn:8080/sayHello",
                //url : "/sayHello",
                type : "POST",
                beforeSend: function(request) {
                    request.setRequestHeader("token","zzz");
                },
                success: function(result) {
                    alert(result);
                }
            })
        })
    })
</script>
</body>
</html>

 

此时访问 localhost:8080/index  然后点击 点击button 按钮就会看到有跨域的错误信息提示

因为我们的浏览器的域名是localhsot, 而我们请求的是 myproject.dev.cn 所以存在跨域问题。

 

yml 增加跨域的域名信息

cors:
  allowedOrigin: localhost

 

 

增加跨域过滤器

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URI;

public class AllowCrossDomainFilter implements Filter {

    @Value("${cors.allowedOrigin}")
    private String allowedOrigin;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println(" 跨域配置  >  allowedOrigin : " + allowedOrigin);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        System.out.println("访问url为: " + req.getRequestURI());
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        resp.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
        String origin = req.getHeader("Origin");
        if (StringUtils.isNotBlank(origin)) {
            URI uri = URI.create(origin.trim());
            String host = uri.getHost();
            System.out.println("origin : " + origin + " host: " + host + " > > allowedOrigin : " + allowedOrigin + " allowedOrigin.indexOf(host) : " + allowedOrigin.indexOf(host));
            if (allowedOrigin.indexOf(host) >= 0) {
                System.out.println(req.getRequestURI() + "允许跨域访问 > allowedOrigin : " + allowedOrigin);
                resp.addHeader("Access-Control-Allow-Origin", origin);
            }
            resp.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
            resp.setHeader("Access-Control-Allow-Credentials", "true");
            resp.setHeader("Access-Control-Allow-Headers", "Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,X-E4M-With,userId,token");
            resp.setCharacterEncoding("utf-8");
        }
        filterChain.doFilter(req, resp);

    }

    @Override
    public void destroy() {

    }
}

 

 

增加配置信息,吧过滤器加入过滤链

import com.example.springboot.filter.AllowCrossDomainFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfig {

    @Bean
    public FilterRegistrationBean filterOneRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(allowCrossDomainFilter());
        registration.addUrlPatterns(new String[]{"/*"});
        registration.setName("filterOne");
        registration.setOrder(1);
        return registration;
    }

    @Bean
    public AllowCrossDomainFilter allowCrossDomainFilter() {
        return new AllowCrossDomainFilter();
    }
}

 

此时在访问localhost:8080/index。然后点击button按钮,就可以看到已经可能访问了

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    springboot设置跨域访问

    前端跨域访问springboot后端时添加响应头。。。。。。

    解决springboot实现跨域session共享问题

    在这个实现类中,我们可以覆盖`addCorsMappings`方法,为每个需要处理的跨域请求设置规则: ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void ...

    Springboot CORS跨域设置.md

    Springboot CORS跨域设置

    跨域+springboot跨域+解决跨域

    springboot跨域 springboot解决跨域问题+不同版本springboot解决跨域问题

    解决 springboot跨域请求问题

    SpringBoot应用可以通过配置CORS来允许特定或所有来源的跨域请求。在SpringBoot应用中,你可以创建一个配置类,比如`CorsConfig`,并添加一个`CorsFilter`。在`buildConfig`方法中,设置`CorsConfiguration`对象,...

    解决Vue调用springboot接口403跨域问题

    然而,跨域资源共享(CORS)问题常常会成为前后端整合过程中的一个难题。在本文中,我们将详细探讨如何解决Vue调用Spring Boot接口时遇到的403跨域问题。 ### CORS问题简介 跨域资源共享(CORS)是一种安全机制,...

    springboot_跨域_

    SpringBoot提供了解决跨域问题的强大工具,开发者可以通过`@CrossOrigin`注解或自定义CORS过滤器来设定跨域策略。在确保安全性的前提下,灵活调整配置以满足前后端分离的开发需求。理解并正确配置跨域策略,是构建...

    SpringBoot应用跨域访问解决方案.docx

    通过定义一个`CorsFilter` Bean,可以设置全局的跨域访问规则。下面是一个示例代码片段,展示如何配置全局的CORS过滤器: ```java @Configuration public class GlobalCorsConfig { @Bean public CorsFilter ...

    SpringBoot 中实现跨域的5种方式.pdf

    第三种方式是在具体的方法上使用@CrossOrigin注解,这属于局部跨域设置。@CrossOrigin注解可以应用于控制器的类或方法上,允许用户细粒度地控制CORS策略。不过,文档中提到SpringBoot 2.4.x版本不再支持这种策略,这...

    springboot vue 跨域问题的解决

    首先,创建一个配置类,使用 `CorsConfiguration` 对象来配置跨域设置。 ```java @Configuration public class CustomCORSConfiguration { private CorsConfiguration buildConfig() { CorsConfiguration ...

    Springboot处理CORS跨域请求的三种方法

    无论选择哪种方式,核心都是通过设置`Access-Control-Allow-*`响应头来告诉浏览器允许哪些跨域请求。了解这些方法后,开发者可以更好地处理Web应用中的跨域问题,确保数据能在不同源之间安全地传递。

    SpringBoot框架RESTful接口设置跨域允许

    SpringBoot 框架 RESTful 接口设置跨域允许 SpringBoot 框架 RESTful 接口设置跨域允许是为了解决浏览器的同源策略...在 SpringBoot 框架中,可以通过配置文件的方式来实现跨域设置,提高应用程序的安全性和灵活性。

    SpringBoot解决跨域请求拦截问题代码实例

    SpringBoot解决跨域请求拦截问题代码实例 在微服务开发中,一个系统包含多个微服务,会存在跨域请求的场景。本文主要讲解SpringBoot解决跨域请求拦截的问题。 知识点1:同源策略 同源策略是浏览器出于网站安全性...

    Springboot 解决跨域的四种姿势 !.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    springboot配置允许跨域访问代码实例

    SpringBoot配置允许跨域访问代码实例 SpringBoot框架通常用于前后端分离项目,因此需要配置后台允许跨域访问,以便前端页面可以正常访问后台接口。下面将详细介绍如何配置SpringBoot允许跨域访问。 跨域访问的...

    SpringBoot第 6 讲:SpringBoot+jersey跨域文件上传

    同时,别忘了在AJAX请求中设置`Content-Type`为`multipart/form-data`和`xhrFields`的`withCredentials`为`true`,以处理跨域身份验证。 总结一下,这个"SpringBoot第6讲:SpringBoot+jersey跨域文件上传"教程主要...

    Springboot跨域问题三种解决方案

    上述代码将允许 UserController 中的所有接口的跨域访问,并且将超时时长设置为 1 小时。 三、自定义跨域过滤器 在 Springboot 项目中,也可以通过实现 Filter 接口来实现自定义的跨域过滤器。例如: ```java ...

    LiuShuaiDong:springboot跨域解决方案

    LiuShuaiDong:springboot跨域解决方案

    SpringBoot解决ajax跨域问题的方法

    SpringBoot解决ajax跨域问题的方法 在Web开发中,ajax跨域问题是一个常见的问题,尤其是在使用SpringBoot框架进行开发时。跨域问题是指在不同的域名、协议或端口之间进行资源请求时所遇到的问题。在本文中,我们将...

    springboot后端解决跨域问题

    Spring Boot解决跨域问题 在今天的文章中,我们将讨论如何使用Spring Boot解决跨域问题。跨域问题是一个常见的安全问题,它是由浏览器的同源策略造成的,即浏览器不能执行其他网站的脚本。 什么是跨域? 跨域是...

Global site tag (gtag.js) - Google Analytics