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?
@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
Vous devez vous connecter pour publier un commentaire.
Enfin, la DispatcheServlet personnaliser initialiseur de la classe était-ce vraiment résolu mon problème. Les OPTIONS de demande n'était pas à cause de la optionsController j'avais mis en œuvre, il a eu tort.
J'ai donc enlevé que optionsController, et simplement en ajoutant l' poignée méthode dans mon Repos Contrôleur pour la demande d'OPTIONS, le problème a été résolu:
OriginalL'auteur daniegarcia254
Si vous utilisez une version moderne de Printemps (4.2), vous pouvez bénéficier de la @CrossOrigin.
En effet, si vous utilisez le Printemps < 4.2 v, vous pouvez créer un Filtre de Servlet et de mettre entendre l'en-tête pour le soutien de la SCRO comme ci-dessous:
au Printemps de démarrage vous pouvez vous inscrire à ce filtre, comme le printemps haricot et le Printemps va enregistrer le filtre pour vous.
J'espère que cela peut vous aider.
OriginalL'auteur Valerio Vaudi