2017-11-02 14 views
0

Ich bin konfrontiert mit einem "HTTP 403 verboten" Fehler beim Versuch, PUT Anfrage einer erholsamen Ressource von einem eckigen Client zu verbrauchen. Ich habe diese erholsame Ressource mit Trikot erstellt und verwende Tomcat 7 als Anwendungsserver.HTTP 403 Verbotene Jersey auf Put Anfrage

Hier ist meine Ressource Code:

@Path("/doc") 
public class DocResource { 


@PUT 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("file/upload") 
public Response uploadFile(MultipartBody body, @QueryParam("ID") long ID) { 
    try { 
     Attachment attachment = body.getAttachment("file"); 
     MultivaluedMap<String, String> headers = attachment.getHeaders(); 
     String fileName = getFileName(headers); 
     DataHandler dataHandler = attachment.getDataHandler(); 
     InputStream inputStream = dataHandler.getInputStream(); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte[] tmp = new byte[4096]; 
     int ret = 0; 

     while ((ret = inputStream.read(tmp)) > 0) { 
      bos.write(tmp, 0, ret); 
     } 

     // TODO - Save contents as process attachment 
     byte[] contents = bos.toByteArray(); 

     return Response.ok(getDocumentService().createAttachment(ID, fileName, contents, attachment.getContentType()), MediaType.APPLICATION_JSON).build(); 
    } catch (Exception e) { 
     return handleException(e, "failed to upload Attachement"); 
    } 
} 
} 

Hier meine Winkel js

this.uploadFile = function uploadFile(callback, ID, file) { 
    var baseRestURL="http://localhost:8080/rest/doc" 
       // resource query 
       var query ; 
       // create form data 
       var formData = new FormData(); 
       formData.append('file', file); 

       // set up the resource 

      var resource = $resource(baseRestURL + '/file/upload', { 
        ID: ID 
       }, { 
        'ID': ID, 
        'upload': { 
         method: 'PUT', 
         headers: { 
          'Content-Type': 'multipart/form-data' 
         } 
        } 
       }); 

       resource.upload(query, formData).$promise.then(function success(response) { 
       if (callback) callback(response); 
       }, function error() { 
        //TODO handle error 
       }); 
      }; 

Snippet ist möchte ich wie DELETE, Post, dass eine andere Art von http Anrufe bemerken und GET richtig funktionieren . Ich habe nur Probleme mit PUT-Anrufen.

+0

Warum schreiben Sie 'Multipart/form-data' mit einem' PUT'? Es sollte stattdessen "POST" sein. –

+0

Diese Put-Anfrage funktionierte und jetzt funktioniert sie nicht mehr. Ich möchte Ihre Aufmerksamkeit darauf lenken, dass alle Anfragen an diese Ressource nicht mehr funktionieren. Also, ich denke, dieses Problem hängt entweder mit einer Tomcat- oder Jersey-Ressourcenkonfiguration zusammen. –

Antwort

0

Ich hatte ein ähnliches Problem, aber sowohl DELETE und PUT funktionierten nicht für mich - zurückgegeben HTTP 403 Fehler. Nachdem ich gesucht hatte, stolperte ich über this link, und es wies darauf hin, wo ich falsch gelaufen bin.

Ich hatte einen CORS-Filter in meinem web.xml als Teil eines anderen R & D ich tat, und vergessen, es zu entfernen.

Dies war von der ursprünglichen web.xml

<servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
     io.swagger.jaxrs.listing, 
     com.xxx.yyy.rest</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value> 
      org.glassfish.jersey.jackson.JacksonFeature; 
      org.apache.catalina.filters.CorsFilter 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

Sobald ich die org.apache.catalina.filters.CorsFilter es entfernt begann für mich zu arbeiten!

Hoffe, das hilft!

Verwandte Themen