如何在WebSphere应用服务器自由配置文件V8.5中定义CORS

15

我目前正在调查http://software.dzhuvinov.com/cors-filter-installation.html:我已经通过了(我可以在Web服务中看到我的打印输出)!唯一的问题是该服务从未返回,我的浏览器一直在等待响应... - Niek Vandael
请查看我的答案,了解Liberty中官方的CORS支持。 - ArthurDM
4个回答

9
您需要将以下jar添加到您的 WEB-INF / lib 文件夹中: 在您的 web.xml 中,您需要添加以下规则:
<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

如果WAR文件只包含HTML和JavaScript,则不确定此方法是否有效。 是否有其他方法可以配置WebSphere Liberty服务器以启用CORS来处理这种情况? - DarVar
@DarVar 你已经解决了你的问题吗?如果你只提供HTML和JavaScript,你就不会遇到这些问题。只有当你在另一个套接字上调用Web服务时才会出现这种情况。 - GuyT
该方法可行,但不幸的是,在我的情况下,需要更改类加载模式才能使其正常工作,这是不理想的。有关该方法的更详细说明,请参见此处:https://clmpractice.org/2015/01/07/how-to-enable-cors-with-rational-team-concert-ccm-running-on-a-websphere-application-server-was-8-5/ - Ruifeng Ma

6

从2016年1月Beta版开始(编辑:现在在Liberty 8559中也支持),WebSphere Liberty可以原生地支持CORS。您只需使用所需的CORS选项配置server.xml,以下是一个示例:

<cors domain="/sampleApp/path"
   allowedOrigins="https://alice.com:8090"
   allowedMethods="GET, DELETE, POST"
   allowedHeaders="Accept, MyRequestHeader1"
   exposeHeaders="MyResponseHeader1"
   allowCredentials="true"
   maxAge="3600" />

域名属性是用于应用根目录的配置,它只会影响特定的上下文路径,不会影响其他路径。另外7个属性遵循官方CORS规范(https://www.w3.org/TR/cors/),因此它们都很容易理解。
Beta链接:https://developer.ibm.com/wasdev/blog/2016/01/15/beta-websphere-liberty-and-tools-january/

1

从ArthurDM扩展到CORS:

  • 使用Liberty Profile 8.5.5.9。因此,将CORS添加到自由配置文件不再是beta版本。
  • 使用JavaEE批处理,并将批处理连接到存储库中的所有数据(而不是内存)。
  • 我想使用batchManagement-1.0功能为批处理的REST API。
  • Angular 1。

最终,以下CORS设置起了作用:

    <cors domain="/ibm/api" 
       allowedOrigins="http://localhost:9080" 
       allowedMethods="GET, POST, PUT, DELETE" 
       allowedHeaders="Accept, Accept-Language, Content-Language, Content-Type" 
       exposeHeaders="Content-Type" 
       allowCredentials="true" 
       maxAge="3600" />

祝你好运,希望它有所帮助。

0

对于那些在使用IBM Websphere应用服务器时寻找解决方法并寻求应用CORS的答案的人,你可以通过编写过滤器程序实现此功能。我知道这个问题的提出者希望得到一个不需要使用Java代码或其他方式的答案... 但是这个答案可能会对其他人有所帮助。 编写一个过滤器程序来让你能够以编程方式设置响应头,例如:

public class YourFilter implements javax.servlet.Filter{

    @Override
    public void doFilter(ServletRequest request,ServletResponse servletResponse , FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse ) servletResponse ;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers","Access-Control-Allow-Origin, X-Requested-With", bla,bla...);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接