在调用Spring Boot应用程序中的控制器之前,我需要做一些工作。是否可以仅拦截对我的控制器的调用?
我知道我可以通过拦截http请求或注册过滤器来实现这一点但是我必须处理URI模式,以便代码只执行一次。
在调用控制器之前执行代码就足够了。
答案 0 :(得分:2)
是否可以仅拦截对我的控制器的呼叫?
您可以将拦截器定义为仅拦截特定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;
}
}
答案 1 :(得分:0)
我已经习惯了这样的问题,这里的Spring Aspect概念是一些简短的例子:
@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表示你想在它们之前执行代码的方法,我希望有帮助