Configurare Interceptor per essere utilizzato per tutti CDI in grano all'interno di un'applicazione

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

  •  01-10-2019
  •  | 
  •  

Domanda

Nel mio JEE6-CDI-webapp, ho dichiarato un intercettore di sicurezza, come questo:

//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();
    }
}

e ha dichiarato che all'interno del 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>

Per usarlo, ho annotare un CDI-fagiolo di conseguenza:

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

Ora mi chiedo, devo annotare tutti i miei CDI-Fagioli da utilizzare per quest'interceptor? O c'è un modo per configurare la beans.xml per utilizzare l'intercettore per tutti i miei CDI in grano, senza dover dichiarare per ogni singolo chicco?

È stato utile?

Soluzione

Non credo che si possa. È possibile però un po 'di scorta di battitura utilizzando stereotipi:

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

}

E poi annotare i vostri fagioli con solo @Secure

Altri suggerimenti

Si potrebbe provare a utilizzare il piccolo CDI estensione che ho scritto qualche mese fa:

https://github.com/struberg/InterDyn

Questo vi permetterà di applicare dinamicamente CDI intercettori a un gruppo di classi tramite stile regexp.

Sarà presto parte di Apache MyFaces CODI, ho solo bisogno di trovare un po 'di tempo per ripulire la parte di configurazione prima;)

Si può essere in ritardo, ma ho incontrato un requisito per il quale avevo bisogno di una vasta intercettore globale / applicazione.

Per consentire interceptor applicazione, annotare l'intercettore come:

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

In questo caso, la buona notizia è che non dovete dichiarare l'intercettore nel beans.xml:

Oracle javaee7 esercitazione

Tutti i fagioli non sono utili. È possibile manipolare i fagioli durante bootstrapping - per esempio ultra_lite_ejbs a Codi-addons (vedi bitbucket org) lo utilizza. Forse è una fonte di ispirazione per voi. IMHO esempio una comunità come openwebbeans.apache.org sarebbe una misura migliore per le vostre domande relative CDI.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top