在做springboot后端项目和vue前端项目,一个前后端分离的项目
前端不想进行修改,想对后端进行调整,但是借鉴了很多网上的资源
都是说在 后端 controller 层添加 @CrossOrign 注解,但是尝试过没有解决问题
望指教!
谢谢
http://t.csdn.cn/LpGns
你试试里面的方法,根据你springboot版本用
我毕设也是springboot,在跨域方面用链接的博客解决了,在前端vue也用了楼上他们说的跨域处理
可以在下方评论区讨论谢谢
页面发过来的请求会先发一个OPTIONS 把这种请求就不验证token了,就可以解决跨域了
用NGINX转发下
vue项目的config配置文件中加代理转发试试,类似于下面这种:
proxy: {
[process.env.VUE_APP_BASE_API]: {
target: process.env.VUE_APP_LOCAL_ADDR,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
}
在项目中添加一个配置类,代码如下
package com.xxx.xxx.xxx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
@WebFilter(filterName = "SimpleCORSFilter",urlPatterns ="/*" )
public class SimpleCORSFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(SimpleCORSFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
logger.info("请求拦截:"+ ((HttpServletRequest) request).getRequestURI());
/*
* 设置允许跨域请求
*/
httpServletResponse.setContentType("text/plain;charset=utf-8");
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
httpServletResponse.setHeader("Access-Control-Max-Age", "0");
httpServletResponse.setHeader("Access-Control-Allow-Headers",
"Content-Type, Access-Control-Allow-Headers, Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, X-E4M-With,userId,Token,WG-Token, Authorization, menuId");
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
httpServletResponse.setHeader("XDomainRequestAllowed", "1");
/*
过虑 OPTIONS 请求
*/
String type = httpServletRequest.getMethod();
if (type.toUpperCase().equals("OPTIONS")) {
return;
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
方法一
@WebFilter
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(req, res);
}
}
2.用前端代理 处理跨域问题
3.用Hbuilderx内置跨域浏览器
3.
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
//是否发送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOrigins("*")
.allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}