• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot跨域的介绍(代码示例)

springboot 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

本篇文章给大家带来的内容是关于SpringBoot跨域的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

前言:公司的SpringBoot项目出于某种原因,经常样处理一些跨域请求。

一。以前通过查阅相关资料自己写的一个处理跨域的类,如下。

1.1首先定义一个filter(拦截所有请求,包括跨域请求)

public class CrossDomainFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {             HttpServletRequest hreq = (HttpServletRequest) request;  //        HttpServletResponse hresp = (HttpServletResponse) response;         //跨域        hresp.setHeader("Access-Control-Allow-Origin", "*");  //设置相应头        //跨域 Header        hresp.setHeader("Access-Control-Allow-Methods",<div style="color:transparent">本文来源gaodai.ma#com搞##代!^码@网*</div> "*");        hresp.setHeader("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,x-requested-with,requesttype");        //header('Access-Control-Allow-Headers:x-requested-with,content-type,requesttype');        // 浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求        // 配置options的请求返回        if (hreq.getMethod().equals("OPTIONS")) {  //如果发现该请求为OPTION,则直接返回(不需要进入系统),并且设置相应信息            hresp.setStatus(200);            // hresp.setContentLength(0);            hresp.getWriter().write("OPTIONS returns OK");            return;        }        // Filter 只是链式处理,请求依然转发到目的地址。        chain.doFilter(request, response);    }}

1.2 注册一个配置类(Configuration),把上面定义的filter类注册到上下文环境中

@Configurationpublic class WebConfiguration {    @Bean    public RemoteIpFilter remoteIpFilter() {        return new RemoteIpFilter();    }    @Bean    public FilterRegistrationBean<CrossDomainFilter> testFilterRegistration() {        FilterRegistrationBean<CrossDomainFilter> registration = new FilterRegistrationBean<CrossDomainFilter>();        registration.setFilter(new CrossDomainFilter());        registration.addUrlPatterns("/*");        registration.addInitParameter("paramName", "paramValue");        registration.setName("MyFilter");        registration.setOrder(1);        return registration;    }}

备注:这个配置类主要解决我们编写的filter(CrossDomainFilter )拦截那些请求

二. SpringBoot自己的解决跨域的Filter(CorsFilter) ,该filter的源码很简单,可直接查看还类的doFilterInternal() 方法,因为该发法在doFilter()方法中会调用(可以理解就是Filter的doFilter()方法)。

处理过程也是接受到OPTION方法并相应200并返回。

@Configuration@EnableAutoConfigurationpublic class CrossOriginconfig {    @Bean    public CorsFilter corsFilter() {        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();        final CorsConfiguration corsConfiguration = new CorsConfiguration();        corsConfiguration.setAllowCredentials(true);        // 设置你要允许的网站域名,如果全允许则设为 *        corsConfiguration.addAllowedOrigin("*");        // 如果要限制 HEADER 或 METHOD 请自行更改        corsConfiguration.addAllowedHeader("*");        corsConfiguration.addAllowedMethod("*");        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);        System.out.println("confi init");        return new CorsFilter(urlBasedCorsConfigurationSource);    }}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot跨域的介绍(代码示例)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址