【问题标题】:Wildfly-swarm @NameBinding not workingWildfly-swarm @NameBinding 不起作用
【发布时间】:2018-10-05 07:01:24
【问题描述】:

我的 wildfly-swarm 应用程序遇到了一个奇怪的问题。 我有一个像这样定义的 JAX-RS 服务、注释和请求过滤器

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) {
        ...
    }
}

据我了解 FooFilter.filter() 应该在每次请求 GET/foo 时调用。使用 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>

提前致谢!

【问题讨论】:

  • 不幸的是,我不知道可能是什么问题。在 WF Swarm 中运行时日志中是否有错误?
  • 任何日志中都没有错误。 :( 我只是尝试使用 org.wildfly.swarmtransactions 因为我认为我忘记了一些依赖关系,而且完整的配置文件也不起作用。跨度>

标签: jakarta-ee annotations wildfly wildfly-swarm requestfiltering


【解决方案1】:

我太傻了。我让它工作了。 我刚刚添加了

public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<>();
    //Filter
    classes.add(FooFilter.class);
    return classes;
}

到我的应用程序类。 Wildfly swarm 基于 Wildfly 11 而不是 12。11 使用 RestEasy 3.0.24 作为 JAX-RS 实现,12 使用 RestEasy 3.5。

看来RestEasy 3.0.24需要手动注册RequestFilter,而3.5不需要。

【讨论】:

  • 您是否尝试过不手动指定分数?我从来不需要在 Swarm 中手动注册过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 2018-05-27
  • 2017-03-06
相关资源
最近更新 更多