相关疑难解决方法(0)

请求的资源上没有"Access-Control-Allow-Origin"标头 - Resteasy

我正在开发一个web应用程序,包括UI-Angular,Server-Java,RestEasy 3.0.9.Final for rest api calls

当我试图从另一个域访问其余服务时,我得到以下错误

无法加载对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http:// localhost:8080 "访问.

我配置我的服务器端以响应跨域调用,这是使用GET调用但POST调用正在创建ERROR

web.xml中

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.test.sample.app.CorsFeature</param-value>
</context-param>

<listener>
    <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>


<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.test.sample.app.Application</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

服务类

@GET
@Path("/getnameAtt")
@Produces(MediaType.APPLICATION_JSON)
public Response getHostnameAttributes() {
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers",
        "origin, content-type, accept, authorization")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods",
        "GET, POST, PUT, DELETE, OPTIONS, HEAD")
.header("Access-Control-Max-Age", "1209600")
.entity(new TestImpl().getHostNameAttributes())
.build();
}

@POST
@Path("/getSeq") …
Run Code Online (Sandbox Code Playgroud)

rest resteasy cors

20
推荐指数
1
解决办法
11万
查看次数

JAX-RS:如何扩展Application类来扫描包?

目前,我做了类似的事情

import javax.annotation.Nonnull;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("oauth")
public class OAuthApplication extends Application {
    final Set<Class<?>> classes = new HashSet<>();

    @Nonnull
    @Override
    public Set<Class<?>> getClasses() {
        classes.add(RegisterResource.class);
        return Collections.unmodifiableSet(classes);
    }
}
Run Code Online (Sandbox Code Playgroud)

不,如果我添加十个新ResourceApplicationPath,我需要做

    classes.add(<ClassName>.class);
Run Code Online (Sandbox Code Playgroud)

十次,这是乏味的,有时也是健忘的.

请问JAX-RSRESTEasy提供,这样我可以提包名和类是在它扫描的方式吗?

我知道Jersey有一些东西

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("org.foo.rest;org.bar.rest");
    }
}
Run Code Online (Sandbox Code Playgroud)

参考

有什么想法/想法吗?

UPDATE

似乎我们可以做到以下 web.xml

   <context-param>
      <param-name>resteasy.scan</param-name>
      <param-value>true</param-value>
   </context-param>
Run Code Online (Sandbox Code Playgroud)

有具体的Java等价物吗?

java rest jax-rs jersey resteasy

10
推荐指数
2
解决办法
1万
查看次数

使用JAX-RS/RESTEasy实现CORS的Ajax请求

我有两个服务器(Apache和JBoss AS7),我需要提供对客户端的所有http方法的访问.所有这些请求必须通过ajax发送.客户端代码示例:

$.ajax({
      type: "get",
      url: "http://localhost:9080/myproject/services/mobile/list",
      crossDomain: true,
      cache: false,
      dataType: "json",
      success: function(response) {
        console.log(response);
      },
      error: function (jqXHR, textStatus, errorThrown) {
        console.log(textStatus);
        console.log(jqXHR.responseText);
        console.log(errorThrown);
        }
    });
Run Code Online (Sandbox Code Playgroud)

在JBoss AS7中我使用RESTEasy,实现如下CORS:

@Path("/mobile")
@Provider
@ServerInterceptor
public class GroupMobile implements MessageBodyWriterInterceptor {

@Inject
private GroupDAO groupDAO;

@GET
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public List<Group> getGroups() {
    return groupDAO.listAll();
}

@Override
public void write(MessageBodyWriterContext context) throws IOException,
        WebApplicationException {
    context.getHeaders().add("Access-Control-Allow-Origin", "*");
    context.proceed();
}

@OPTIONS
@Path("/{path:.*}")
public Response handleCORSRequest(
        @HeaderParam("Access-Control-Request-Method") final String requestMethod,
        @HeaderParam("Access-Control-Request-Headers") final String requestHeaders) …
Run Code Online (Sandbox Code Playgroud)

ajax json jax-rs resteasy cors

5
推荐指数
2
解决办法
2万
查看次数

如何启用MultiPartFeature?

我的JAX-RS应用程序有一个扩展的Application类.

@ApplicationPath("/")
public class MyApplication extends Application {
    // empty; really empty
}
Run Code Online (Sandbox Code Playgroud)

如何在org.glassfish.jersey.media.multipart.MultiPartFeature不修改课程的情况下启用?或者没有必要注册所有资源类/包?

multipartform-data jax-rs multipart jersey jersey-2.0

5
推荐指数
1
解决办法
1万
查看次数

CORS:AngularJS + Resteasy 3 + Wildfly

我正在使用AngularJS和Resteasy开发一个应用程序.正如所料,我面临众所周知的问题

XMLHttpRequest cannot load http://localhost:8080/..... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403.

正如在其他堆栈溢出帖[1]上看到的,我尝试使用来自Feature对象的Resteasy的CorsFilter,但我得到:

[33m02:06:57,883 WARN  [org.jboss.resteasy.core.ExceptionHandler] (default task-1) failed to execute: javax.ws.rs.ForbiddenException: Origin not allowed: http://localhost:3000
    at org.jboss.resteasy.plugins.interceptors.CorsFilter.checkOrigin(CorsFilter.java:194)
    at org.jboss.resteasy.plugins.interceptors.CorsFilter.filter(CorsFilter.java:134)
Run Code Online (Sandbox Code Playgroud)

我的CorsFeature对象:

@Provider
public class CorsFeature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        CorsFilter corsFilter = new CorsFilter();
        corsFilter.getAllowedOrigins().add("*");
        context.register(corsFilter);
        return true;
    }  
}
Run Code Online (Sandbox Code Playgroud)

web.xml中我添加了:

<context-param>
    <param-name>resteasy.providers</param-name> …
Run Code Online (Sandbox Code Playgroud)

jboss resteasy cors angularjs

5
推荐指数
1
解决办法
8848
查看次数

JAX-RS (Jersey 2) 安全性、@PermitAll 和 @RolesAllowed 未按预期工作

我有一个包含三个资源的 REST-API。第一个中的方法称为 PublicResource,任何人都应该可以访问(即匿名访问)。第二个方法中的方法称为 SecretResource,应该只能由特定的用户组访问。最后,称为 MixedResource 的第三个资源具有混合设置,其中一些方法受到保护,一些方法对公共访问开放。

注释@PermitAll 和@RolesAllowed 并不像我期望的那样工作。尽管 PublicResource 用 @PermitAll 进行了注释,但我在尝试访问它时仍然会被要求授权。MixedResource 中用@PermitAll 注释的方法也是如此。所以基本上,我的所有资源都被要求授权,即使我应该匿名访问。

我在 Payara 4.1 上运行,我很困惑,因为我在另一个运行在 WebLogic 12.1.3 上的应用程序中进行了非常相似的设置,并且注释按预期工作。我错过了什么或弄错了什么?在下面查看我的完整代码。

公共资源.java:

    import javax.annotation.security.PermitAll;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;

    @Path("public")
    @PermitAll
    public class PublicResource {

        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String itsPublic() {
            return "public";
        }

    }
Run Code Online (Sandbox Code Playgroud)

秘密资源.java:

    import javax.annotation.security.RolesAllowed;
    import javax.ws.rs.GET;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;

    @Path("secret")
    @RolesAllowed({ "SECRET" })
    public class SecretResource {

        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String itsSecret() {
            return "secret";
        }

    }
Run Code Online (Sandbox Code Playgroud)

混合资源.java:

    import …
Run Code Online (Sandbox Code Playgroud)

java security rest jax-rs jersey

4
推荐指数
1
解决办法
8417
查看次数

在resteasy中添加corsfilter后无法访问服务

将corsfilter添加到ApplicationPath后,我无法访问任何服务

这是一个例子

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import org.jboss.resteasy.plugins.interceptors.CorsFilter;


@ApplicationPath("/")
public class JaxRsActivator extends Application {
    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> classes = new HashSet<Class<?>>();

    public JaxRsActivator() {
        CorsFilter corsFilter = new CorsFilter();
        corsFilter.getAllowedOrigins().add("*");
        corsFilter.setAllowedHeaders("Content-Type");
        singletons.add(corsFilter);
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我卷曲,我会得到这个,

curl -i http://localhost:8080/unika/usuarios -H "Origin:otherdomain.com"
HTTP/1.1 404 Not Found
Connection: keep-alive
Access-Control-Allow-Origin: otherdomain.com
X-Powered-By: Undertow 1
Server: Wildfly 8 …
Run Code Online (Sandbox Code Playgroud)

java jax-rs resteasy

3
推荐指数
1
解决办法
1006
查看次数

CORSFilter 不适用于 JAX-RS 应用程序

我在用resteasy-jaxrs - 3.0.9.FINAL。我有两个独立javax.ws.rs.core.Application

@ApplicationPath("oauth")
public class OAuthApplication extends Application {
    final Set<Class<?>> classes = new HashSet<>();

    @Nonnull
    @Override
    public Set<Class<?>> getClasses() {
        classes.add(RegisterResource.class);
        classes.add(TokenResource.class);
        classes.add(HelloResource.class);
        return Collections.unmodifiableSet(classes);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于/oauth基于端点和

@ApplicationPath("rest")
public class RestApplication extends Application {
    final Set<Class<?>> classes = new HashSet<>();

    @Nonnull
    @Override
    public Set<Class<?>> getClasses() {
        classes.add(CategoryResource.class);
        classes.add(CategoryGroupResource.class);
        classes.add(TransactionResource.class);
        classes.add(MonthlySummaryResource.class);
        classes.add(MemberResource.class);
        return Collections.unmodifiableSet(classes);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的过滤器看起来像

@Provider
public class CorsFeature implements Feature {

  @Override
  public boolean configure(FeatureContext featureContext) {
    CorsFilter corsFilter …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs wildfly

3
推荐指数
1
解决办法
2484
查看次数