2017-11-02 13 views
0

각 클라이언트로부터 안정적인 리소스의 PUT 요청을 사용하는 동안 'HTTP 403 금지'오류가 발생합니다. 저지를 사용하여이 편안한 리소스를 만들었고 응용 프로그램 서버로 tomcat 7을 사용하고 있습니다. 여기 내 각 JS 내가 같은 DELETE, POST 등의 HTTP 호출의 다른 유형을 발견하고 제대로 작동하고 싶어HTTP 403 저지 저지 (put) 요청시

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

스 니펫입니다

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

: 여기

내 자원 코드 . PUT 호출에만 문제가 있습니다.

+0

왜'PUT '으로'Multipart/form-data'를 게시하고 있습니까? 대신 'POST'여야합니다. –

+0

이 put 요청이 작동 중이며 더 이상 작동하지 않습니다. 이 리소스에 대한 모든 요청을 더 이상 작동하지 않게주의를 기울이고 싶습니다. 그래서이 문제는 바람둥이 또는 저지 자원 구성과 관련이 있다고 생각합니다. –

답변

0

비슷한 문제가 있었지만 DELETE와 PUT이 모두 작동하지 않았습니다. HTTP 403 오류가 반환되었습니다. 내가 검색 한 후에 나는 this link을 우연히 발견했고, 내가 잘못 나온 곳을 지적했다.

CORS 필터를 내 web.xml에 추가했습니다. R & D의 일부로 CORS 필터를 추가하고 제거하는 것을 잊었습니다. 나는 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> 

에서 있었다!

희망이 도움이됩니다.