当前位置:首页 > 编程笔记 > 正文
已解决

SpringBoot跨域问题

来自网友在路上 152852提问 提问时间:2023-10-28 19:03:17阅读次数: 52

最佳答案 问答题库528位专家为你答疑解惑

 一、适用场景:


HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

当我们对外提供服务是需要通过域名访问我们的服务,获取数据,在内网中我们可以通过http访问,前端访问后端也可以通过http,这时候的协议是一致的不会存在跨域问题。
 

当前端提供的是https 后端提供的确实http,就会出现跨域问题。
我们一般对外的服务都是通过https的,所以需要后端解决跨域访问问题。前端提供出去的域名一定是HTTPS协议。

二、出现问题:

访问接口:
strict-origin-when-cross-origin

访问服务:
When allowCredentials is true, allowedOrigins cannot contain the special value "*"since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.

意思是:当allowCredentials为true时,allowingOrigins不能包含特殊值“ *”,因为无法在“ Access-Control-Allow-Origin”响应标头上设置。要允许凭据具有一组来源,请明确列出它们或考虑改用“ allowedOriginPatterns”。
 

三、解决-两个类建议和启动类同级目录

@SpringBootConfiguration
public class MyWebConfigurer implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry corsRegistry) {/*** 所有请求都允许跨域,使用这种配置就不需要* 在interceptor中配置header了*/corsRegistry.addMapping("/**").allowCredentials(true).allowedOriginPatterns("*").allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").allowedHeaders("*").maxAge(3600);}
}
public class ProcessInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");httpServletResponse.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");httpServletResponse.setHeader("X-Powered-By", "Jetty");String method = httpServletRequest.getMethod();if (method.equals("OPTIONS")) {httpServletResponse.setStatus(200);return false;}System.out.println(method);return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}
}

每天努力一点,每天都在进步

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"SpringBoot跨域问题":http://eshow365.cn/6-27024-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!