アプリケーション内のすべてのCDI-Beanに使用するインターセプターを構成する

StackOverflow https://stackoverflow.com/questions/3674883

  •  01-10-2019
  •  | 
  •  

質問

私のJEE6-CDI-WEBAPPでは、このようなセキュリティインターセプターを宣言しました。

//Secure.java
@Inherited
@Target({TYPE, METHOD})
@Retention(RUNTIME)
@InterceptorBinding
public @interface Secure
{}

//SecurityInterceptor.java
@Secure
@Interceptor
public class SecurityInterceptor
{
    @AroundInvoke
    protected Object invoke(InvocationContext ctx) throws Exception
    {
        // do stuff
        ctx.proceed();
    }
}

beans.xml内でそれを宣言しました:

//beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
   <alternatives/>
   <decorators/>
   <interceptors>
     <class>com.profitbricks.security.SecurityInterceptor</class>
   </interceptors>
</beans>

それを使用するには、それに応じてCDI-Beanに注釈を付けます。

//CDI bean using Inteceptor
@Named @RequestScoped
@Secure
public class TestBean {
    public String doStuff() {
    }
}

今、私は自分自身に尋ねます、私はこのインターセプターを使用するために私のすべてのCDI-Beansに注釈を付けなければなりませんか?または、すべてのBeanで宣言することなく、すべてのCDI-Beanにインターセプターを使用するようにBeans.xmlを構成する方法はありますか?

役に立ちましたか?

解決

できないと思います。ただし、ステレオタイプを使用して、少し入力することができます。

@Named
@RequestScoped
@Secure
@Stereotype
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Secure {

}

そして、あなたの豆にのみ注釈を付けます @Secure

他のヒント

私が数ヶ月前に書いた小さなCDI拡張機能を使用しようとすることができます:

https://github.com/struberg/interdyn

これにより、regexpスタイルを介してCDIインターセプターを多数のクラスに動的に適用できます。

まもなくApache Myfaces Codiの一部になります。最初に構成部分をクリーンアップする時間を見つける必要があります;)

これらは遅れている可能性がありますが、グローバル/アプリケーションワイドインターセプターが必要な要件に遭遇しました。

アプリケーションインターセプターを有効にするには、インターセプターに次のように注釈を付けます。

@Priority(Interceptor.Priority.APPLICATION)
@Interceptor
@Logging
public class MyLoggingInterceptor {}

この場合、良いニュースは、Beans.xmlのインターセプターを宣言する必要がないことです。

Oracle Javaee7チュートリアル

すべての豆は役に立ちません。ブートストラップ中に豆を操作できます-CODI -ADDONS(Bitbucket orgを参照)でultra_lite_ejbsなどを使用できます。多分それはあなたにとってインスピレーションです。 IMHO Eたとえば、OpenWebeans.apache.orgのようなコミュニティは、CDI関連の質問に適しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top