将Access-Control-Allow-Origin添加到Web服务 [英] Add Access-Control-Allow-Origin to Web Service

查看:582
本文介绍了将Access-Control-Allow-Origin添加到Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个网络服务,如:

  @Controller 
@RequestMapping(/)
public class ApplicationController {

@RequestMapping(value =/ Changes,method = RequestMethod.GET)
public String inspect(ModelMap model){
model.addAttribute ,example);

returnindex;
}
}

localhost:8081 / ChangesPDF / Changes?...



我试图通过Alfresco得到这个webservice的响应,链接:localhost:8080 / share。我现在有不同的港口(当我有相同的港口,这工作很好),所以,与不同的港口我得到的错误在Alfresco:


跨原始请求已阻止:同源策略不允许读取
远程资源,地址为: http:// localhost: 8081 / ChangesPDF / Changes ?...(原因:标题CORS'Access-Control-Allow-Origin'缺失)。


如何添加此标头?

解决方案

您应该添加一个过滤器,原始接受域localhost:8081(*为所有)。



很可能你会在这里找到你的答案 cores-filter-not-working



p>

首先创建过滤器类

  public class CorsFilter implements Filter {

private static final Logger log = Logger.getAnonymousLogger();

@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 [] allowDomain = {localhost:8080,localhost:8081};


String originHeader = request.getHeader(host);

for(String domian:allowDomain){

if(originHeader.endsWith(domian))

response.setHeader(Access- Allow-Origin,originHeader);
break;
}
filterChain.doFilter(servletRequest,servletResponse);

}

@Override
public void destroy(){}
}

向web.xml类添加映射

 < filter& 
< filter-name> cors< / filter-name>
< filter-class>此处的过滤器类的全名< / filter-class>
< / filter>

< filter-mapping>
< filter-name> cors< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

您应该根据您的要求在web.xml配置中定义URL pattren


I have a webservice like:

@Controller
@RequestMapping("/")
public class ApplicationController {

    @RequestMapping(value="/Changes", method = RequestMethod.GET)
    public String inspect(ModelMap model) {
         model.addAttribute("msg", "example");

         return "index";
    }
}

in the link: "localhost:8081/ChangesPDF/Changes?..."

I'm trying to get the response of this webservice through Alfresco that is in the link: "localhost:8080/share". I have different ports now (when I have same ports, this works good), so, with different ports I get the error in Alfresco:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/ChangesPDF/Changes?... (Reason: Header CORS 'Access-Control-Allow-Origin' missing).

How can I add this header?

解决方案

You should add a filter that sets the "Access-Control-Allow-Origin" to accepts domain "localhost:8081" (* for all).

Most probably you will find your answer here cores-filter-not-working

More explanation:

Create a filter class first

public class CorsFilter implements Filter {

    private static final Logger log = Logger.getAnonymousLogger();

    @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;

        // can be moved to properties
        String[] allowDomain = {"localhost:8080","localhost:8081"};              


        String originHeader = request.getHeader("host");

        for(String domian : allowDomain){

            if(originHeader.endsWith(domian))

            response.setHeader("Access-Control-Allow-Origin", originHeader);
            break;
        }
        filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {}
}

Add mapping to your web.xml class

<filter>
    <filter-name>cors</filter-name>
    <filter-class>full name of your filter class here</filter-class>
</filter>

<filter-mapping>
    <filter-name>cors</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

you should correclty define the URL pattren in web.xml config according to your requirnment

这篇关于将Access-Control-Allow-Origin添加到Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆