简体   繁体   English

HTTP 403禁止请求的泽西岛

[英]HTTP 403 Forbidden Jersey on Put Request

I am facing an 'HTTP 403 Forbidden' error while trying to consume PUT request of a restful resource from an angular client. 尝试消耗来自角度客户端的静态资源的PUT请求时,我遇到“ HTTP 403禁止访问”错误。 I created this restful resource using jersey and I am using tomcat 7 as application server. 我使用jersey创建了这个宁静的资源,并且我将tomcat 7用作应用程序服务器。

Here is my resource 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");
    }
}
}

Here is my angular js snippet 这是我的角度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
              });
          };

I want to notice that other type of http calls such as DELETE, POST and GET are working properly. 我想注意到其他类型的http调用(例如DELETE,POST和GET)可以正常工作。 I have only problems with PUT calls. 我只有PUT通话问题。

I had a similar issue, but both DELETE and PUT were not working for me - returned HTTP 403 error. 我有一个类似的问题,但是DELETE和PUT都不适合我-返回HTTP 403错误。 After I searched I stumbled across this link , and it pointed out where I went wrong. 搜索之后,我偶然发现了此链接 ,它指出了我出了错。

I had a CORS filter added in my web.xml as part of some other R&D i was doing, and forgot to remove it. 在我正在做的其他一些研发工作中,我在web.xml添加了一个CORS过滤器,却忘了删除它。

This was from the original web.xml 这是来自原始的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>

Once I removed the org.apache.catalina.filters.CorsFilter it started to work for me! 一旦删除了org.apache.catalina.filters.CorsFilter它就开始为我工作!

Hope this helps! 希望这可以帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 执行PUT请求时使用HTTP 403 - HTTP 403 while executing a PUT request Java HTTP GET请求给出403禁止,但可在浏览器中使用 - Java HTTP GET request gives 403 Forbidden, but works in browser 泽西岛:处理静态HTTP PUT(更新)请求的最佳实践 - Jersey: Best practice handling restful HTTP PUT (update) request Jersey http客户端:使用自定义Content-Length发出请求 - Jersey http client: put request with custom Content-Length Web 客户端 PUT 请求返回 403,但 Postman 请求不返回 - Glassfish 上的 Jersey REST API - Web Client PUT request returns 403 but Postman request does not - Jersey REST API on Glassfish OPTIONS请求禁止axios 403 - axios 403 forbidden on OPTIONS request Jersey ContainerRequestFilter:抛出“ abortWith”且状态被禁止后获取404(403) - Jersey ContainerRequestFilter: Getting 404 after throwing 'abortWith' with status forbidden (403) HTTP Put 请求使用 Sun Jersey Client 1.19 工作,但相同的请求不使用 SoapUI 或 Postman - HTTP Put request works using Sun Jersey Client 1.19, but same request is not using SoapUI or Postman HTTP Post 到 API 返回 403 FORBIDDEN - HTTP Post to API return 403 FORBIDDEN HTTP 403 禁止 - Auth JASS Spring 骆驼 - HTTP 403 Forbidden - Auth JASS Spring Camel
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM