2

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() {
    }
}

Now i ask myself, do i have to annotate ALL my CDI-Beans to use this interceptor? Or is there a way to configure the beans.xml to use the interceptor for all my CDI-beans, without having to declare it for every single bean?

4

4 に答える 4

2

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

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

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

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

Oracle javaee7 チュートリアル

于 2015-02-02T21:56:33.773 に答える
2

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

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

}

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

于 2010-09-09T08:25:47.957 に答える
2

数か月前に私が書いた小さな CDI 拡張機能を試してみてください。

https://github.com/struberg/InterDyn

これにより、正規表現スタイルを介して一連のクラスに CDI インターセプターを動的に適用できます。

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

于 2011-09-12T20:35:26.533 に答える
0

すべての Bean が役に立たない。ブートストラップ中に Bean を操作できます。たとえば、codi-addons の ultra_lite_ejbs (bitbucket org を参照) で使用されます。多分それはあなたにとってインスピレーションです。IMHO たとえば、openwebbeans.apache.org のようなコミュニティは、CDI 関連の質問により適しています。

于 2010-11-28T20:51:15.243 に答える