Swagger UI CORS 配置Java CXF jersey REST API
Swagger UI CORS configuration Java CXF jersey REST API
嗨,我有问题 UI。我有类似这个的配置文件。
<bean id="resourceWriter" class="com.wordnik.swagger.jaxrs.listing.ResourceListingProvider" />
<bean id="apiWriter" class="com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider" />
<bean id="swaggerResourceJSON" class="com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON" />
<jaxrs:server id="swaggerAPI" address="/swagger">
<jaxrs:serviceBeans>
<ref bean="swaggerResourceJSON"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
<bean class="com.ge.aviation.svc.fss.exception.WebExceptionHandler"/>
<ref bean="resourceWriter"/>
<ref bean="apiWriter"/>
</jaxrs:providers>
</jaxrs:server>
<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
<property name="resourcePackage" value="package.of.my.service"/>
<property name="version" value="1.0.0"/>
<property name="basePath" value="http://localhost:8090/"/>
<property name="title" value="Sample Service"/>
<property name="description" value="Service for storing, searching, and retrieving files."/>
<property name="contact" value="sup...@example.com"/>
<property name="scan" value="true"/>
</bean>
然后我的服务器 运行 完美并且有招摇的终点 UI。
http://localhost:8095/api/api-docs/
然后我在浏览器中复制这个 URL 它会显示 Json file.But 我已经在我的 tomcat 中复制了 swagger UI dist 文件(不是上面提到的同一台服务器)然后添加上面的 URL 然后它说 Can't read from server. It may not have the appropriate access-control-origin settings
。我发现错误的原因是 https://github.com/swagger-api/swagger-ui/issues/146 and https://github.com/swagger-api/swagger-ui#cors-support 但我想知道如何为 ApiListingResourceJSON class 有 api-docs 终点。
swagger-core 项目中的所有示例都包含示例文件管理器和如何启用 CORS 支持的配置。
基本上,您将创建以下过滤器:
public class ApiOriginFilter implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type, api_key, Authorization");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
并将其添加到您的 web.xml:
<filter>
<filter-name>ApiOriginFilter</filter-name>
<filter-class>com.wordnik.swagger.sample.util.ApiOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然,如果您不使用 web.xml,则可以使用其他方法连接它,但这取决于您的使用情况。
通过添加所有这些,CORS 将在您的整个应用程序中启用。
我已经用这种方法解决了问题。罗恩的回答也正确,但我没有使用任何 web.xml configuration.This 是答案。org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter
作为提供添加到服务器,@CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true)
注释添加到 REST API控制器。
嗨,我有问题 UI。我有类似这个的配置文件。
<bean id="resourceWriter" class="com.wordnik.swagger.jaxrs.listing.ResourceListingProvider" />
<bean id="apiWriter" class="com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider" />
<bean id="swaggerResourceJSON" class="com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON" />
<jaxrs:server id="swaggerAPI" address="/swagger">
<jaxrs:serviceBeans>
<ref bean="swaggerResourceJSON"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
<bean class="com.ge.aviation.svc.fss.exception.WebExceptionHandler"/>
<ref bean="resourceWriter"/>
<ref bean="apiWriter"/>
</jaxrs:providers>
</jaxrs:server>
<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
<property name="resourcePackage" value="package.of.my.service"/>
<property name="version" value="1.0.0"/>
<property name="basePath" value="http://localhost:8090/"/>
<property name="title" value="Sample Service"/>
<property name="description" value="Service for storing, searching, and retrieving files."/>
<property name="contact" value="sup...@example.com"/>
<property name="scan" value="true"/>
</bean>
然后我的服务器 运行 完美并且有招摇的终点 UI。
http://localhost:8095/api/api-docs/
然后我在浏览器中复制这个 URL 它会显示 Json file.But 我已经在我的 tomcat 中复制了 swagger UI dist 文件(不是上面提到的同一台服务器)然后添加上面的 URL 然后它说 Can't read from server. It may not have the appropriate access-control-origin settings
。我发现错误的原因是 https://github.com/swagger-api/swagger-ui/issues/146 and https://github.com/swagger-api/swagger-ui#cors-support 但我想知道如何为 ApiListingResourceJSON class 有 api-docs 终点。
swagger-core 项目中的所有示例都包含示例文件管理器和如何启用 CORS 支持的配置。
基本上,您将创建以下过滤器:
public class ApiOriginFilter implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type, api_key, Authorization");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
并将其添加到您的 web.xml:
<filter>
<filter-name>ApiOriginFilter</filter-name>
<filter-class>com.wordnik.swagger.sample.util.ApiOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然,如果您不使用 web.xml,则可以使用其他方法连接它,但这取决于您的使用情况。
通过添加所有这些,CORS 将在您的整个应用程序中启用。
我已经用这种方法解决了问题。罗恩的回答也正确,但我没有使用任何 web.xml configuration.This 是答案。org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter
作为提供添加到服务器,@CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true)
注释添加到 REST API控制器。