2016-07-23 3 views
0

Ich versuche, ein Byte-Array eines Dateiinhalts von eckigen zum Rest API zu senden. Aber ich bekomme Http 403 verboten. Ich habe keine Sicherheit aktiviert. Ich bin mir nicht sicher, was ich falsch mache. Ich habe ein paar verschiedene MIME-Typen ausprobiert. Das Folgende ist der http-Post von angular js und die $ scope.encoded_file hat die Datei im Byte-Array.Spring Rest Controller mit Byte-Array-Datei

$http({ 
    method:'POST', 
    url:'http://localhost:9200/docupload', 
    data:{'content':$scope.encoded_file,'name':'test','type':'pdf'}, 
    headers:{'Content-Type':'application/octet-stream'} 
    }).success(function(){}); 
}; 

DocUploadService

@RestController 
    public class DocUploadService { 

    @RequestMapping(value="/docupload",method={RequestMethod.GET,RequestMethod.POST},consumes="application/octet-stream") 
    public String UploadDocuments(@RequestParam(value="content")byte[] content,@RequestParam(value="type") String type,@RequestParam(value="name") String name) throws IOException 
    { 
     System.out.println("****Inside DocUpload*****");}} 

Die Anforderung an den Service natürlich doesnt zu erreichen, und ich weiß nicht, warum ich 403. Jede Idee bin immer?

Anforderungsheader: enter image description here

Added @CrossOrigin in vor dem Verfahren Dienst aber noch kein Glück

Haben hinzugefügt die unter der CrossOrigin auf die Controller-Methode.

public class DocUploadService { 
@CrossOrigin(origins = "http://localhost:9200") 
@RequestMapping(value="/docupload",method={RequestMethod.GET,RequestMethod.POST,RequestMethod.OPTIONS,RequestMethod.PUT},consumes="application/octet-stream") 

Auch globale CORS Registrierung hinzugefügt.

@EnableWebMvc 
public class WebMVCconfig extends WebMvcConfigurerAdapter { 

@Override 
public void addCorsMappings(CorsRegistry registry) { 
    // TODO Auto-generated method stub 
    registry.addMapping("/docupload") 
    .allowedOrigins("http://localhost:9200") 
    .allowedMethods("POST", "GET","OPTION","PUT"); 
    super.addCorsMappings(registry); 

} 
+0

Das könnte ein CORS-Problem sein. Haben Sie andere Controller, die tatsächlich funktionieren? –

+0

Versuchen Sie, die Anfrage zu prüfen (mit Chrome Firebug zum Beispiel), um zu sehen, ob es einen CORS Fehler gibt –

+0

Es sollte CORS sein. Aber ich weiß nicht, wie ich es lösen soll. Bitte überprüfen Sie den bearbeiteten Bereich des Posts. Ich habe Anforderungsheader hinzugefügt. – GAK

Antwort

0

Versuchen Sie, einen Filter hinzugefügt CORS zu vermeiden:

@Component 
public class SimpleCORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     response.setHeader("Access-Control-Expose-Headers", "Location"); 
     chain.doFilter(req, res); 
    } 

    public void init(FilterConfig filterConfig) {} 

    public void destroy() {} 

} 

Oder Sie können auch Anmerkung verwenden @CrossOrigin:

@CrossOrigin(origins = "http://localhost:9200") 

Es ist ein Beispiel hier:

https://spring.io/guides/gs/rest-service-cors/

+0

Hallo, vielen Dank für die Zeit auf diese. Ich habe alles versucht, basierend auf dem Frühling Doc für CORS, aber immer noch kein Glück und ich weiß nicht, was das Problem ist. Ich benutze Spring Boot, also habe ich keine web.xml. Ich werde auch den Filteransatz ausprobieren. – GAK

+0

Ich habe meine Antwort bearbeitet, das ist eine Filterdefinition für Spring-Boot. –

+0

Hallo Alvaro. Danke, dass Sie mir dabei geholfen haben. Das Hinzufügen des Filters funktionierte auch nicht für mich. Ich musste das CSRF endlich deaktivieren, damit es funktioniert. Ich weiß, das ist nicht die richtige Lösung. Ich werde weiter daran arbeiten und diesen Thread aktualisieren, wenn ich etwas neues finde. Vielen Dank. – GAK

Verwandte Themen