2017-11-02 39 views
0

角度のあるクライアントからの安らかなリソースのPUTリクエストを消費しようとしているときに、「HTTP 403禁止」エラーが発生しました。私はジャージーを使用してこの安らかなリソースを作成し、アプリケーションサーバーとしてtomcat 7を使用しています。ここでHTTP 403禁止リクエスト時の禁止ジャージ

は、私のリソースのコードです:

@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"); 
    } 
} 
} 

ここに私の角の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 
       }); 
      }; 

スニペットている私は、このような、DELETE POSTやGETなどのHTTP呼び出しの他のタイプが正常に動作していることがわかりたいです。私はPUT呼び出しにのみ問題があります。

+0

なぜ 'マルチパート/フォームデータ 'を' PUT'でポストしていますか?代わりに 'POST'でなければなりません。 –

+0

このput要求は機能していましたが、現在は動作していません。私は、このリソースへのすべてのput要求がもはや機能していないことに注目したいと思います。だから、私はこの問題が風刺漫画やジャージのリソース構成に関係していると思う。 –

答えて

0

私は同様の問題がありましたが、DELETEとPUTの両方が動作していなかったため、HTTP 403エラーが返されました。私が検索した後、私はthis linkを見つけ、どこが間違っているのかを指摘しました。

CORSフィルタを私のweb.xmlに追加しました。他にもいくつかのR & Dの一部として追加しました。削除するのを忘れました。私はそれが私のために働き始めorg.apache.catalina.filters.CorsFilterを取り除いたら

これは、元の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> 

からでした!

希望すると便利です。

関連する問題