拦截器不拦截
问题描述:
我在设置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,因此没有任何意义。
感谢,
沃尔特
答
回答我的问题好,我做了以下内容:
- 我做的,而不是罐子(里面的maven)项目EJB。
- 我创建了一个指定/声明我的拦截器(src/main/resources/META-INF)的ejb-jar.xml文件。
- 在使用这个拦截器的项目中,我将类型指定为ejb,以便它能正确拾取它。
沃尔特
答
“我已指定在Web应用程序中的beans.xml拦截”
是@Secured在另一个项目/罐界定?在这种情况下,你需要在beans.xml中启用它。
+0
是的,它在另一个项目/罐子里。是的,我在那里启用了它。我认为这是Glassfish 3.x的一个错误。 – Walter 2013-02-24 12:33:00
这是beans.xml中拦截器的完全量化名称吗? @Secured注释是否定义为拦截器? – 2013-02-15 21:52:34
由于其他原因,我删除了完全限定名,但是,容器确实看到此文件并解析该行。如果我放入了一些虚假的东西,它会引发错误。 – Walter 2013-02-16 17:01:42
如何获得该bean的实例? – covener 2013-02-16 20:40:43