SpringCloud中如何解决跨域问题呢?

戚薇 Spring Cloud 发布时间:2023-06-01 08:29:46 阅读数:10229 1
下文笔者讲述SpringCloud解决跨越问题的方法分享,如下所示

SpringCloud解决跨越问题的实现思路

方式1:
    添加过滤器配置类,解决跨域问题
方式2:
    添加一个Spring Bean,解决跨域问题

添加过滤器配置类,解决跨域问题

package com.java265.config;
 
import org.springframework.context.annotation.Configuration;
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 

@Configuration
@WebFilter(filterName = "CorsFilter", urlPatterns = {"/*"})
public class CorsFilter implements Filter{
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
 
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
 
        // 响应标头指定 指定可以访问资源的URI路径
        res.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
        // 指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露
        res.setHeader("Access-Control-Allow-Credentials", "true");
        //响应标头指定响应访问所述资源到时允许的一种或多种方法
        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        //设置 缓存可以生存的最大秒数
        res.setHeader("Access-Control-Max-Age", "3600");
        //自定义 可以被访问的响应头
        res.setHeader("Access-Control-Allow-Headers", "*");
 
        chain.doFilter(request, response);
    }
 
    @Override
    public void destroy() {
    }
}

使用Spring Bean方式,解决跨域问题

/**
 * 解决跨域问题
 *
 * @return
 */
@Bean
public CorsFilter corsFilter() {
	final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
	final CorsConfiguration config = new CorsConfiguration();
	// 允许cookies跨域
	config.setAllowCredentials(true);
	// 允许向该服务器提交请求的URI,*表示全部允许。。这里尽量限制来源域,比如http://xxxx:8080 ,以降低安全风险。。
	config.addAllowedOrigin("*");
	// 允许访问的头信息,*表示全部
	config.addAllowedHeader("*");
	// 预检请求的缓存时间(秒),即在这个时间段里,相同的跨域请求不会再预检
	config.setMaxAge(18000L);
	// 允许提交请求的方法,*表示全部允许,也可以单独设置GET、PUT等
	config.addAllowedMethod("*");
	// 允许请求方法
	config.addAllowedMethod("HEAD");
	config.addAllowedMethod("GET");
	config.addAllowedMethod("PUT");
	config.addAllowedMethod("POST");
	config.addAllowedMethod("DELETE");
	config.addAllowedMethod("PATCH");
	source.registerCorsConfiguration("/**", config);
	return new CorsFilter(source);
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringCloud/202306/6671.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者