2016-04-29 9 views
2

Ich habe ein Login-Formular mit AngularJS für die Benutzerauthentifizierung implementiert. Unten ist mein Service für die Anmeldung mit Post-Anfrage:Access-Control-Allow-Origin-Header wurde nicht gefunden, nachdem der CORS-Filter hinzugefügt wurde

Ich habe den folgenden Fehler, wenn ich es ausführen.

XMLHttpRequest cannot load http://localhost:8080/login.No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access. 

Ich habe einige Nachforschungen gemacht und herausgefunden, dass die Kopfzeile auf der Serverseite hinzugefügt werden muss. Nach diesen post, habe ich folgendes meine Ruhe-Service

@Component 
public class SimpleCORSFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); 

     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) { 
    } 

    @Override 
    public void destroy() { 
    } 
} 

Allerdings habe ich immer noch die gleichen Fehler.

+0

Haben Sie überprüft, was 'request.getHeader (" Origin ")' zurückgibt? –

+0

Wie hast du die Get-Anfrage geschrieben? –

+0

@PritamBanerjee Der Login-Dienst ist eigentlich eine Post-Anfrage. Siehe meine Änderungen im ursprünglichen Post. Da die Authentifizierung über die Spring-Sicherheit erfolgt, ist für "http: // localhost: 8080/login" kein Controller von der Serverseite notwendig. – Nasreddin

Antwort

3

Da der Browser für http://127.0.0.1:8081 im zulassen Origin-Header aussieht, müssen Sie sicherstellen, dass dies in der folgenden Zeile hinzugefügt zu werden:

response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081"); 

Um die http://127.0.0.1:8081 Sie verwenden können:

request.getRemoteAddr() + ":" + request.getRemotePort(); 

Aber wenn der Browser nach localhost sucht, dann gehen Sie für die:

request.getRemoteHost(). 

Hoffnung, die Ihr Problem löst.

+0

Versuchte alles, was Sie vorgeschlagen haben, immer noch das Gleiche. Selbst versuchte 'response.setHeader (" Access-Control-Allow-Origin "," * ");' funktioniert immer noch nicht – Nasreddin

+0

Mit Post ist das Problem, es sendet zuerst eine Preflight-Anfrage, die vom Browser blockiert wird. –

+0

Sie können versuchen, die Web-Sicherheit im Browser zu deaktivieren. Aber das wird nur eine vorübergehende Lösung sein. –

Verwandte Themen