我正在使用CXF +弹簧靴来开发Restful服务。并在CORS设置方面遇到问题
我在服务定义接口(GateRs)上设置了CORS
...
@Service
@CrossOriginResourceSharing(
allowAllOrigins = true,
allowHeaders = {
"Accept", "Accept-Charset", "Accept-Encoding", "Accept-Datetime",
"Accept-Language", "Authorization", "Content-Language", "Content-Length",
"Content-Type", "Origin", "User-Agent"},
exposeHeaders = {
"Accept", "Accept-Charset", "Accept-Encoding", "Accept-Datetime",
"Accept-Language", "Authorization", "Content-Language", "Content-Length",
"Content-Type", "Origin", "User-Agent"},
allowCredentials = true,
maxAge = 1209600 )
public interface GateRs {
@POST
@Path("/require")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@VoluntarySecure
public Res require(Req req);
...
带有类的实现接口
@Component
public class Gate implements GateRs {
@Override
public Res require(Req req) {
...
将“ CrossOriginResourceSharingFilter”附加到服务bean
@Bean
public CrossOriginResourceSharingFilter cors() {
return new CrossOriginResourceSharingFilter();
}
@Bean(destroyMethod = "destroy") @DependsOn(Bus.DEFAULT_BUS_ID)
public Server jaxRsServer() {
final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
factory.setServiceBean(new Gate());
factory.setProviders(Arrays.asList(jackson(), cors()));
factory.setBus(springBus());
factory.setAddress("/Gate");
return factory.create();
}
...
客户端是基于Ionic的移动应用程序,并由Chrome浏览器模拟。
“ / Gate / require”返回“ 404”,因为CORS失败,没有“ Access-Control-Allow-Origin“标头。
我仔细研究了细节;并且发现预检('OPTIONS')实际上成功了; “ POST”失败,触发了上述消息
飞行前(选项)
POST失败;似乎服务器端未在响应消息中显示“ Access-Control-Allow-Origin”标头
有人有什么想法或建议吗?
谢谢
答案 0 :(得分:0)
我终于通过如下更改“ @CrossOriginResourceSharing”解决了该问题:
1 + summation<2, 3, 4>::value; // Trims out first parameter; matches variadic version
2 + summation<3, 4>::value; // Again, trims out first parameter;matches variadic version
3 + summation<4>::value; // Matches <size> version. You support signature up-to this point
4 + summation<>::value; // summation<> definition is missing in your code!!