一、在做前后端分离的时候经常会遇见报错代码403,然后说什么options什么的东西,类似于下面这种

通过下面的的处理就能解决这个问题
二、主要是通过过滤器来实现
在zuul下新建一个FirstFilter 继承ZuulFilter
package com.beilu.apigateway.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description
* @Author shen
* @Date 2019/3/14 23:53
**/
public class FirstFilter extends ZuulFilter {
private Logger logger = LoggerFactory.getLogger(FirstFilter.class);
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
//只过滤OPTIONS 请求
if(request.getMethod().equals(RequestMethod.OPTIONS.name())){
return true;
}
return false;
}
@Override
public Object run() throws ZuulException {
logger.debug("*****************FirstFilter run start*****************");
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletResponse response = ctx.getResponse();
HttpServletRequest request = ctx.getRequest();
response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Headers","authorization, content-type");
response.setHeader("Access-Control-Allow-Methods","POST,GET");
response.setHeader("Access-Control-Expose-Headers","X-forwared-port, X-forwarded-host");
response.setHeader("Vary","Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
//不再路由
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(200);
logger.debug("*****************FirstFilter run end*****************");
return null;
}
}
之后再你需要的做跨域的请求上加上@CrossOrigin注解就OK了,如下这样就行
@CrossOrigin
@RequestMapping("pushNoticeToUser")
@ResponseBody
public Map<String,Object> pushNoticeToUser(@RequestParam("body")String body) throws ClientException
当然这不是唯一的处理办法,上面的方法时后台做处理。然后还有就是前段可以做处理也行,就是前段请求的时候用jsonp的方式也行。想了解更过的同学自行百度了。
在前后端分离的项目中,遇到403错误通常与跨域有关。本文介绍了通过在Zuul中创建FirstFilter并使用@CrossOrigin注解来解决跨域问题,同时提到了前端使用jsonp方式处理跨域的另一种方案。

4149

被折叠的 条评论
为什么被折叠?



