2016-09-15 17 views
0

Springブートアプリケーションのコントローラが呼び出される前に、いくつかの作業を行う必要があります。私のコントローラへの呼び出しを傍受することだけが可能ですか?Springブートアプリケーションのコントローラが呼び出される前にコードを実行する

httpリクエストを傍受してフィルタを登録することでこれを実現できますが、コードが一度だけ実行されるようにURIパターンを処理する必要があります。

コントローラが呼び出される直前にコードを実行するだけで十分です。私はここに春のアスペクト概念は、いくつかの簡単な例で、このような問題のために使用されてきた

+1

をあなたは春のアスペクトを試していけない理由

は、これはあなたのインターセプタこの方法を追加することによって行われていますか? – imoteb

+0

私はこの動作が必要なケースが1つしかありません。また、私はSpring Bootでこのような基本的なことが可能であると確信しています。 – T3rm1

+0

コントローラBeanの作成前後で何かを作成したい場合は、BeanPostProcessorを使用することもできますが、コントローラーコールではなく、その場合にのみトリガーされます。 – nowszy94

答えて

0

:ここ

@Component 
@Aspect 
public class MyAspect { 


    private final static String pointcutExpr = "execution(* com.example.myApp.myMethod(..)) || execution(* com.example.myApp.mySecondMethod(..))"; 

    @Before(pointcutExpr) 
    public void doSomethingBefore(JoinPoint joinPoint) throws Exception { 

     //here your code 
    } 
} 

MyMethodはとmySecondMethodは、あなたが彼らの前にコードを実行するメソッドを表し、私はそれが

1
を役に立てば幸い

私のコントローラへの呼び出しを傍受することは可能ですか?

特定のURI /コントローラの呼び出しをインターセプトするためだけにインターセプタを定義できます。

registry.addInterceptor(new MyInterceptor()).addPathPatterns("/your/uri"); 

完全なコード:

@Configuration 
public class AnnotationSecurityConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new MyInterceptor()).addPathPatterns("/your/uri"); 
    } 
} 

public class MyInterceptor implements HandlerInterceptor { 
    @Override 
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { 
     System.out.println("afterCompletion"); 
    } 
    @Override 
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { 
     System.out.println("postHandle"); 
    } 
    @Override 
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { 
     System.out.println("preHandle"); 
     return true; 
    } 
} 
+0

私はすべてのコントローラへのすべてのコールをインターセプトしたいと思っています。しかし、私はリクエストを傍受したくない。静的リソース(js、css、images)。 – T3rm1

+0

@ T3rm1では、コントローラメソッドがここにリンクするパスをいつでも指定できます。 –

関連する問題