View Javadoc
1   package common.http.interceptor;
2   
3   import javax.servlet.ServletException;
4   import javax.servlet.http.HttpServletRequest;
5   import javax.servlet.http.HttpServletResponse;
6   import java.io.IOException;
7   import java.lang.annotation.Annotation;
8   
9   
10  /**
11   * Classe astratta rappresentante un interceptor invocabile da un {@link InterceptableServlet} prima di eseguire
12   * un metodo "doGet", "doPost", "doX"... <br/>
13   *
14   * Per definire un interceptor occorre:
15   * <ul>
16   *     <li>Estendere questa classe (Specificando l'annotazione a cui la nuova sottoclasse sarà associata)</li>
17   *     <li>Definire il comportamento dell'interceptor sovrascrivendo i metodi {@link ServletInterceptor#handle(HttpServletRequest, HttpServletResponse, HttpServletBiConsumer)}
18   *     e {@link ServletInterceptor#init(Annotation)}</li>
19   * </ul>
20   *
21   * @param <A> Il tipo di annotazione a cui l'interceptor sarà associato
22   */
23  public abstract class ServletInterceptor<A extends Annotation>{
24  
25  
26      /**
27       * Chiamato dal factory per inizializzare l'interceptor dopo averlo istanziato.
28       * @param annotation L'istanza di annotazione associata all'interceptor, con eventuali parametri necessari per la configurazione
29       */
30      protected abstract void init (A annotation);
31  
32      /**
33       * Metodo contenete la logica dell'interceptor, che si occupa di processare la richiesta e la risposta passati come parametro
34       * e di passare eventualmente il controllo eventualmente al prossimo metodo specificato come parametro
35       * @param req La richiesta da processare
36       * @param resp La risposta da processare
37       * @param next Il riferimento al metodo a cui poter passare il controllo
38       * @throws ServletException
39       * @throws IOException
40       */
41      public abstract void handle(HttpServletRequest req, HttpServletResponse resp, HttpServletBiConsumer next)
42              throws ServletException, IOException;
43  
44      /**
45       * Definisce l'ordine in cui l'interceptor deve essere eseguito rispetto agli altri interceptor.
46       * Un numero più basso implica una maggiore priorità. Il valore di default (Se il metodo non è sovrascritto) è Integer.MAX_VALUE
47       * @return La priorità dell'interceptor
48       */
49      public int priority(){
50          return Integer.MAX_VALUE/2;
51      }
52  }