Activer la SCRO pour les OPTIONS de demande à l'aide du Framework Spring

Chaque fois que je fais une requête Ajax à mon service, il renvoie l'erreur suivante:

XMLHttpRequest ne peut pas charger http://localhost:8080/users/edit. Réponse à la demande de contrôle en amont ne passent pas de contrôle d'accès: Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine " http://localhost:63342 ' est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 403.

Après 2 jours d'enquête, j'ai atteint d'essayer la solution suivante sur mon code.

C'est le classe principale où je charger les classes nécessaires et exécuter l'application:

@SpringBootApplication
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DispatcherServletInitializer.class, OptionsController.class,Application.class);
    }
}

La DispatcherServilet initialiseur, où je activer le dispatchOptionsRequest:

public abstract class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setInitParameter("dispatchOptionsRequest", "true");
        super.customizeRegistration(registration);
    }
}

Un contrôleur pour gérer toutes les OPTIONS de demande:

@Controller
public class OptionsController {

    @RequestMapping(method = RequestMethod.OPTIONS)
    public HttpServletResponse handle(HttpServletResponse theHttpServletResponse) throws IOException {
        theHttpServletResponse.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with");
        theHttpServletResponse.addHeader("Access-Control-Max-Age", "60"); 
        theHttpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        theHttpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
        return theHttpServletResponse;
    }

}

Ce que je fais de mal avec la configuration?

avez-vous essayé @CrossOrigin dans votre controller printemps.io/guides/gs/service rest de la scro ? (Je pense qu'il a été ajouté au démarrage 1.3.0)
Juste ajouté le @CrossOrigin(origins = "*", maxAge = 3600) ligne pour le contrôleur et toujours la même erreur.
Avez-vous désactivez les options de contrôleur pendant le test? Cette annotation devrait suffire à tout faire
Vous avez enfin le droit! =) Ajout de la méthode @RequestMapping( value = "/**", method = RequestMethod.OPTIONS ) public ResponseEntity handle() { return new ResponseEntity(HttpStatus.OK); } à mon contrôleur résolu! Merci!
Pourquoi ne pas ajouter le code qui a résolu votre problème? Il serait d'aider les futurs lecteurs.

OriginalL'auteur daniegarcia254 | 2016-06-09