Java JBoss/Resteasy如何在公开API之前使用过滤器预填充对象?

Java JBoss/Resteasy如何在公开API之前使用过滤器预填充对象?,java,rest,jboss,resteasy,Java,Rest,Jboss,Resteasy,环境:JBossAS7,RestEasy 3.0.5 我想在我的应用程序中使用预处理过滤器对特定用户进行身份验证,并将此已验证用户添加到请求范围。我尝试了以下方法: @Provider public class SecurityFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { // au

环境:JBossAS7,RestEasy 3.0.5

我想在我的应用程序中使用预处理过滤器对特定用户进行身份验证,并将此已验证用户添加到请求范围。我尝试了以下方法:

@Provider
public class SecurityFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) {
        // authenticate, lookup user code etc...
        requestContext.setProperty("User", new User("test"));
    }
}
然后使用以下命令在bean级别访问它:

@Stateless
public class TestBean {

    @Context HttpServletRequest servletRequest;

    @GET
    @Path("/hello")
    public String hello() {
        return "Hello " + servletRequest.getAttribute("User");
    }

}
但是,当bean由于错误被注释为无状态(EJB逻辑需要无状态)时,不会注入上下文元素

  • 有人能想出解决这个问题的办法吗
  • 或者,是否有更典型的解决方案,使用过滤器预填充这些对象

  • 非常感谢您的阅读。

    我以前做过的是,我有一个web应用程序,如果您愿意,可以将其“facade”连接到EJB。JAX-RS层在该应用程序中实现。servlet过滤器拦截对JAX-RS资源的请求,并调用实现“身份验证、查找用户代码等”逻辑的CDI服务。成功后,CDI服务将当前用户对象导出到CDI。此用户对象在EJB中被
    @Inject
    'ed

    如果CDI是您的一个选项(我不明白为什么不在这个设置中),您可以从
    SecurityFilter
    中执行相同的操作(即将
    用户
    导出到CDI),而无需创建web应用程序


    此外,服务层(EJB)对特定于web的API(
    HttpServletRequest
    )的依赖性有点令人毛骨悚然;我真的认为对实际的
    用户
    对象进行依赖注入才是正确的方法。

    谢谢,依赖注入当然是正确的方法。添加一个RequestScope存储来共享用户信息既干净又简单,并且避免了使用特定于web的API污染EJB。