Origine de la croix de la requête avec filtre de la SCRO
Je suis en train de faire des requêtes d'origine à partir d'un AngularJS 1.3 application à un service REST. Bien que j'ai activé la SCRO Filtre, je reçois un 403 Forbidden réponse. Voici la demande (copier coller à partir de google chrome dev tools). Sur IE 9 il semble fonctionner. J'obtiens une erreur 403 du code sur Chrome et Firefox.
Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/<path>
Request Method:OPTIONS
Status Code:403 Forbidden
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en,ro;q=0.8,en-US;q=0.6,en-GB;q=0.4
Access-Control-Request-Headers:x-auth-token, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, ike Gecko) Chrome/40.0.2214.111 Safari/537.36
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin, Accept, x-auth-token, Content-Type,
Access-Control-Request-Method, Access-Control-Request-Headers
Access-Control-Allow-Methods:POST, GET, HEAD, OPTIONS
Access-Control-Allow-Origin:http://localhost:9000
Content-Length:0
Content-Type:text/plain
Date:Tue, 17 Feb 2015 07:11:24 GMT
Server:Apache-Coyote/1.1
L'URL est ok. Si je le coller dans le navigateur directement, il fonctionne.
La croix authentification de l'origine des travaux:
Remote Address:127.0.0.1:8080
Request
URL:http://localhost:8080/<serviceName>/webapi/authentication/authenticate
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en,ro;q=0.8,en-US;q=0.6,en-GB;q=0.4
Connection:keep-alive
Content-Length:42
Content-Type:application/json;charset=UTF-8
Host:localhost:8080
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Request Payload
{username: "user", password: "pass"}
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:9000
Content-Length:100
Content-Type:application/json
Date:Tue, 17 Feb 2015 07:11:24 GMT
Server:Apache-Coyote/1.1
Set-Cookie:JSESSIONID=805B2490C0BA258D7D0FF4235BA49B76; Path=/<appcontext>/;
HttpOnly
Je suis en utilisant le Printemps de Sécurité pour l'authentification. De quoi d'autre ai-je besoin pour traverser les requêtes d'origine?
De la SCRO filtre utilisé:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class CORSFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9000");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, x-auth-token, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
OriginalL'auteur Mihai Serban | 2015-02-17
Vous devez vous connecter pour publier un commentaire.
Par la SCRO non-
GET
envoyer des demandes de contrôle en amont du demande dans le navigateur automatiquement. Vous devriez permettre àOPTIONS
méthode sur votre serveur HTTP et dans la SCRO permettre les en-têtes de servir ces demandes. Votre serveur doit répondre avec la SCRO permettre les en-têtes et200 ok
avec vide le corps de la réponse à la preflights.En fonction de vos commentaires, le problème est probablement causé par votre personnalisé
x-auth-token
en-tête, qui n'est pas envoyé par leOPTIONS
demande, de sorte que votre serveur a répondu avec403 forbidden
.Je suis d'accord avec Ryan, vous ne devez pas vérifier auth-têtes par des OPTIONS.
Est-il activé sur le serveur HTTP (par exemple, dans le htaccess/web.config)? Gérez-vous avec 200 ok?
Le CORS du filtre est activé dans web.xml c'est pourquoi les en-têtes apparaissent dans la réponse. Et c'est mappée à l'url-les modèles utilisés.
Je pense que vous avez mal compris. Cela n'a rien à voir avec de la SCRO en-têtes. Le problème que votre serveur ne sert pas la demande OPTIONS. Vous devez l'ajouter à l'itinéraire et envoyer 200 ok avec vide le corps de la réponse et de l'ofc. le même de la SCRO permettre les en-têtes. Btw. ce problème n'a rien à voir avec le repos et angulaire.
J'ai réussi à résoudre ce problème en supprimant le x-auth-jeton. C'est la réponse correcte.
OriginalL'auteur inf3rno
Dans le cas de contrôlé de la SCRO demandes, vous devez être conscient que les informations d'identification ne sont pas envoyés dans le
OPTIONS
demande. Si ce dernier renvoie le bon de la SCRO en-têtes dans sa réponse, la cible de la requête est ensuite appelé les informations d'identification. C'est pourquoi vous avez le code d'état 403...Si vous avez besoin d'ajuster votre CORS du filtre de ne pas essayer de s'authentifier ce
OPTIONS
demande.En plus de la réponse précédente, ce lien pourrait vous aider à résoudre votre problème: https://templth.wordpress.com/2014/11/12/understanding-and-using-cors/.
Veuillez aussi ne pas mettre des slogans dans les postes. SE ne vous décourager, et il n'ajoute rien à la poste.
OriginalL'auteur Thierry Templier