【发布时间】:2013-02-15 20:04:54
【问题描述】:
我在设置 Java EE 6 CDI 拦截器时遇到问题。我正在使用嵌入式 glassfish,我在 web 应用程序的 beans.xml 中指定了拦截器。
<beans
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
<class>ServiceInterceptor</class>
</interceptors>
</beans>
我正在尝试保护这个 bean:
@Named
//@Stateless
@RequestScoped
public class SecuredMethodJSFBean /*implements Serializable*/{
@Inject
protected SecuredMethodSample securedMethodSample;
/*
@CurrentUser
@SessionScoped
@Inject
protected RuntimePrincipalAware principal;
//protected JSFLoginBean jsfLoginBean;
*/
public SecuredMethodJSFBean()
{
super();
System.out.println("creating secured method jsf bean");
}
@Secured("adfadfafd")
public void doSomething()
{
//System.out.println("\n\n\n\nprincipal:" + principal);
//System.out.println("principal:" + jsfLoginBean.getPrincipal());
//securedMethodSample.doSomething(jsfLoginBean.getPrincipal().getName());
//return(jsfLoginBean.getPrincipal().getName());
//securedMethodSample.doSomething(principal.getName());
//return(principal.getName());
//return("secured-method");
securedMethodSample.doSomething("testing ...");
}
}
我需要做什么才能让我的拦截器运行?
另外,我正在尝试使用拦截器来拦截 servlet 使用的 bean 上的方法调用。由于那些豆子是豆子,我应该能够拦截它们。但是,我无法这样做。我最初试图直接拦截 servlet 中的方法调用,但它们不是 CDI bean,所以这没有意义。
谢谢,
沃尔特
【问题讨论】:
-
这是 beans.xml 中拦截器的完全量化名称吗? @Secured 注解是否定义为拦截器?
-
我出于其他原因删除了完全限定名称,但是是的,容器确实看到了这个文件并解析了该行。如果我输入一些虚假的东西,它会引发错误。
-
如何获得该 bean 的实例?
-
你指的是什么bean?我注释掉了拦截器中的所有注入代码,现在应该没有依赖了。
-
我们在询问 SecuredMethodJSFBean。基本上,看到可能的原因可能是 SecuredMethodJSFBean bean = new SecuredMethodJSFBean ();
标签: java-ee-6 cdi interceptor