【问题标题】:Java EE Interceptors and @ViewScoped beanJava EE 拦截器和@ViewScoped bean
【发布时间】:2012-10-11 14:00:34
【问题描述】:

我正在使用 JBoss 7.1 构建一个 Java EE 应用程序。

为了对用户操作进行全面审核,我计划使用拦截器来记录对我的 bean 方法的每次调用。

为此,我有以下要求:

@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Logged {
}

然后我定义我的拦截器类:

@Logged
@Interceptor
public class UserActionInterceptor implements Serializable {

private static final long serialVersionUID = 1L;
private Logger log = LoggerFactory.getLogger(UserActionInterceptor.class);

public UserActionInterceptor() {
}

@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception {
    log.debug(invocationContext.getMethod().getName() + " invoked.");
    return invocationContext.proceed();
    }
}

到目前为止,这一切正常。如果我使用这个拦截器绑定一个类,我会得到一些日志记录。但是,当我想定位我的 bean 类时,它会变得更加棘手。

如果我有一个 @RequestScoped 类型的 bean 并将它绑定到我的拦截器,它就可以工作。但是,如果我有一个 @ViewScoped 类型的 bean,那么它不会

我查阅了@ViewScoped 的定义,发现:

@Retention(value=RUNTIME)
@Target(value=TYPE)
@Inherited
public @interface ViewScoped

我感觉问题在于这个注释没有目标类型 METHOD,并且它阻止我的拦截器拦截对类方法的调用。

以前有人遇到过同样的问题吗?有人知道是否可以扩展 bean 的范围,以便在不改变 @ViewScoped 的性质的情况下拦截其方法?

【问题讨论】:

    标签: jakarta-ee logging jboss interceptor


    【解决方案1】:

    这是因为拦截器无法访问@ManagedBean。 @ViewScope 不是 CDI 的一部分,它带有 JSF bean。

    为了使其工作,最可靠的方法是通过使用提供它的扩展之一将@ViewScoped 与 CDI 一起使用。您的选项包括 MyFaces CODI 和 Seam 3(例如)。

    通过安装 MyFaces CODI 并在这些导入中使用以下注释,我已经让它工作了(与您描述它的方式相同):

    import javax.faces.bean.ViewScoped;
    import javax.inject.Named;
    
    @Named
    @ViewScoped
    @Interceptors({ MyInterceptor.class})
    

    【讨论】:

      【解决方案2】:

      或者你可以试试这个很好的话题http://www.verborgh.be/articles/2010/01/06/porting-the-viewscoped-jsf-annotation-to-cdi/Steven Verborgh 解释了如何使用 CDI 扩展来创建你自己的 ViewScope。

      【讨论】:

        猜你喜欢
        • 2019-03-23
        • 1970-01-01
        • 2013-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        相关资源
        最近更新 更多