2013-02-15 311 views
0

我在設置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,因此沒有任何意義。

感謝,

沃爾特

+0

這是beans.xml中攔截器的完全量化名稱嗎? @Secured註釋是否定義爲攔截器? – 2013-02-15 21:52:34

+0

由於其他原因,我刪除了完全限定名,但是,容器確實看到此文件並解析該行。如果我放入了一些虛假的東西,它會引發錯誤。 – Walter 2013-02-16 17:01:42

+1

如何獲得該bean的實例? – covener 2013-02-16 20:40:43

回答

0

回答我的問題好,我做了以下內容:

  1. 我做的,而不是罐子(裏面的maven)項目EJB。
  2. 我創建了一個指定/聲明我的攔截器(src/main/resources/META-INF)的ejb-jar.xml文件。
  3. 在使用這個攔截器的項目中,我將類型指定爲ejb,以便它能正確拾取它。

沃爾特

1

「我已指定在Web應用程序中的beans.xml攔截」

是@Secured在另一個項目/罐界定?在這種情況下,你需要在beans.xml中啓用它。

+0

是的,它在另一個項目/罐子裏。是的,我在那裏啓用了它。我認爲這是Glassfish 3.x的一個錯誤。 – Walter 2013-02-24 12:33:00