Wildfly-swarm @NameBinding 不工作
Wildfly-swarm @NameBinding not working
我的 wildfly-swarm 应用程序遇到了一个奇怪的问题。
我有一个 JAX-RS 服务、注释和 RequestFilter 定义如下
FooService.java
@Path("/foo")
@RequestScoped
@Api(value = "foo")
public class FooService extends BaseService {
@GET
@Produces({MediaType.APPLICATION_JSON})
@ApiOperation(...)
@ApiResponses(...)
@Secured({UserGroup.USER})
public Response getBar(@ApiParam(...) @QueryParam("id") int id) {
return Response.ok("bar").build();
}
}
BaseService.java
public class BaseService {
...
}
Secured.java
@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Secured {
UserGroup[] value() default {};
}
FooFilter.java
@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class FooFilter extends BaseService implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
...
}
}
据我所知,每次请求 GET/foo 时都应调用 FooFilter.filter() 。使用 Wildfly 12 一切正常,但 运行 我的 wildfly-swarm 应用程序 FooFilter.filter() 从未被调用。
有什么建议吗?
为了完整起见,这里是我的 pom 文件中的依赖项。
<!-- Java EE 7 dependency -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- WildFly Swarm Fractions -->
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>cdi</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>ejb</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>jaxrs</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.wildfly.swarm</groupId>
<artifactId>h2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>transactions</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${version.mysql}</version>
</dependency>
提前致谢!
愚蠢的我。我让它工作了。
我刚刚添加了
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
//Filter
classes.add(FooFilter.class);
return classes;
}
到我的申请 class。 Wildfly swarm 基于 Wildfly 11 而不是 12。11 使用 RestEasy 3.0.24 作为 JAX-RS 实现,12 使用 RestEasy 3.5。
RestEasy 3.0.24好像需要手动注册一个RequestFilter,而3.5不需要。
我的 wildfly-swarm 应用程序遇到了一个奇怪的问题。 我有一个 JAX-RS 服务、注释和 RequestFilter 定义如下
FooService.java
@Path("/foo")
@RequestScoped
@Api(value = "foo")
public class FooService extends BaseService {
@GET
@Produces({MediaType.APPLICATION_JSON})
@ApiOperation(...)
@ApiResponses(...)
@Secured({UserGroup.USER})
public Response getBar(@ApiParam(...) @QueryParam("id") int id) {
return Response.ok("bar").build();
}
}
BaseService.java
public class BaseService {
...
}
Secured.java
@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Secured {
UserGroup[] value() default {};
}
FooFilter.java
@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class FooFilter extends BaseService implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
...
}
}
据我所知,每次请求 GET/foo 时都应调用 FooFilter.filter() 。使用 Wildfly 12 一切正常,但 运行 我的 wildfly-swarm 应用程序 FooFilter.filter() 从未被调用。 有什么建议吗?
为了完整起见,这里是我的 pom 文件中的依赖项。
<!-- Java EE 7 dependency --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <!-- WildFly Swarm Fractions --> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>cdi</artifactId> </dependency> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>ejb</artifactId> </dependency> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jaxrs</artifactId> </dependency> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jpa</artifactId> <exclusions> <exclusion> <groupId>org.wildfly.swarm</groupId> <artifactId>h2</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>transactions</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${version.mysql}</version> </dependency>
提前致谢!
愚蠢的我。我让它工作了。 我刚刚添加了
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
//Filter
classes.add(FooFilter.class);
return classes;
}
到我的申请 class。 Wildfly swarm 基于 Wildfly 11 而不是 12。11 使用 RestEasy 3.0.24 作为 JAX-RS 实现,12 使用 RestEasy 3.5。
RestEasy 3.0.24好像需要手动注册一个RequestFilter,而3.5不需要。