请教一个springboot跨域的问题

白白了白呀白 2019-03-07 11:47:40

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@WebFilter(urlPatterns = "/*")
public class OriginFilter implements Filter {

private static final Logger logger = LoggerFactory.getLogger(OriginFilter.class);

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest)servletRequest;
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
String method = request.getMethod();
if(method.equalsIgnoreCase("OPTIONS")){
servletResponse.getOutputStream().write("Success".getBytes("utf-8"));
}else{
filterChain.doFilter(servletRequest, servletResponse);
}
}

@Override
public void destroy() {

}
}

项目是前后端分离的 我后台如果添了这段跨域处理的代码 部署到服务器上,前端请求就会报跨域问题,如果我注释掉的话前端就能正常访问 这是啥问题呢?如果只是我后台做了跨域处理,前端没做任何处理 他的访问是不是就是不能正常执行了。
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
daniel_kaka 2019-03-09
  • 打赏
  • 举报
回复

	@CrossOrigin(
			origins = {"http://url"}, 
			allowedHeaders = {"xxxx"}, 
			exposedHeaders = {"xxxxx"},
			methods = {RequestMethod.GET},
			allowCredentials = "xxxx",
			maxAge = 3600)
	@RequestMapping(value = {"/demo/{id}"}, 
	        method = {RequestMethod.GET}, 
	        produces = {MediaType.APPLICATION_JSON_VALUE})
        .......
在对应的处理器或者处理器方法上加上@CrossOrigin注解,便可以针对每一个处理器进行跨域设置。
闪耀的瞬间 2019-03-08
  • 打赏
  • 举报
回复
既然是 SpringBoot 为什么还用 Filter,用个 RestController 直接返回回去不就好了,剩下的是解决SpringBoot跨域了,

@Configuration
public class CorsConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
.maxAge(3600);
}
}
闪耀的瞬间 2019-03-08
  • 打赏
  • 举报
回复
是的,这样配置下就可以解决
白白了白呀白 2019-03-08
  • 打赏
  • 举报
回复
引用 3 楼 闪耀的瞬间 的回复:
既然是 SpringBoot 为什么还用 Filter,用个 RestController 直接返回回去不就好了,剩下的是解决SpringBoot跨域了,

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
                .maxAge(3600);
    }
}
你这种方式 我查找的时候也参考了,像这些配置完跨域问题就可以了吗,为什么你还要说剩下的是解决SpringBoot跨域了呢,
  • 打赏
  • 举报
回复
后端直接用HttpClent JAVA的后台是不分域的 建议更换技术
maradona1984 2019-03-07
  • 打赏
  • 举报
回复
springboot就用springboot的方法来做跨域
https://blog.csdn.net/yft_android/article/details/80307672

或者检查下这段代码是不是有问题,跨域是安全策略,服务端允许某个域名可以跨域访问,浏览器不会组织访问的

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧