Я разрабатывал службу Restful, используя пружинную загрузку CXF +.и были проблемы с настройкой CORS
Я установил CORS на интерфейсе определения сервиса (GateRs)
...
@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
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» в ответном сообщении
У кого-нибудь есть идеи или предложения?
спасибо