美文网首页
手动解决跨域问题

手动解决跨域问题

作者: 寂静的春天1988 | 来源:发表于2019-12-10 16:16 被阅读0次

1、工作中遇到一个需求如下:
以前的项目都是每一个项目都有一个文件上传下载的功能,现在需要将文件上传下载的功能独立成一个单独的项目。
由不同的前端项目都来访问该项目来实现文件上传下载。

这里就遇到了一个跨域访问的问题。
本来@CrossOrigin(value = "域名")注解就能解决,但是需求想每次修改可以访问的域名时不用重启项目,只用将域名配置重新修改就可以生效。

我的解决办法
思路
1、将可访问的域名配置进file.properties文件
2、写一个过滤器,每次请求访问都取得请求头中的Origin属性,和配置文件中的配置的url对比,如果存在,则在响应中添加Access-Control-Allow-Origin属性。

@Component
public class CrossDomainFilter implements Filter{

    private final static Logger log = LoggerFactory.getLogger(CrossDomainFilter.class);
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res= (HttpServletResponse) response;
        check(req,res);
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }

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

    }
    private void check(HttpServletRequest request,HttpServletResponse response) {
        //加载properties文件,如果访问的域名在白名单中则添加到Access-Control-Allow-Origin属性中
        ClassPathResource cr = new ClassPathResource("file.properties");
        Properties properties = new Properties();
        try {
            properties.load(cr.getInputStream());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }  
        log.info("properties:"+properties);
        String []  allowDomain= properties.get("white-list").toString().split(",");
        Set allowedOrigins= new HashSet(Arrays.asList(allowDomain));
        String originHeader=request.getHeader("Origin");
        log.info("originHeader:"+originHeader);
        if (allowedOrigins.contains(originHeader)){
            response.addHeader("Access-Control-Allow-Origin", originHeader);
        }
    }

}

如果大牛路过,欢迎指出错误!不胜感谢!

相关文章

网友评论

      本文标题:手动解决跨域问题

      本文链接:https://www.haomeiwen.com/subject/hkyggctx.html