spring 中拦截器的使用
Usage of interceptor in spring
情况是这样的:
为什么我要使用拦截器?
我想编写一个模块来存储有关在我的服务器上处理的所有请求的数据。这些数据对我做数据可视化有很大的帮助。
我目前使用情况如何?
@Component
public class MyCustomInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
System.out.println("In Interceptor");
return true;
}
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
System.out.println("In Post Handler");
}
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("After completion");
}
}
我正在如下注册拦截器,
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="demo.mycustom")
public class MyInterceptorConfig extends WebMvcConfigurerAdapter{
@Autowired
MyCustomInterceptor obj;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(obj);
}
}
现在的挑战是,
当我尝试登录 "localhost:8096/myApp/#/login" 时,返回 404 页面未找到。仅当我添加拦截器配置时才会观察到这一点。尽管我认为这是必需的,因为我必须告诉我的应用程序这是我要注册的拦截器。
这里可以做什么?
观察:
当我调试并看到 preHandle 内部时,有趣的一点是 "handler" 参数给了我 org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml
而当我正常使用应用程序时(没有拦截器)我得到的是 org.springframework.web.servlet.mvc.ParameterizableViewController@1bff7859
这转移了我的注意力,让我在拦截器配置中添加 addViewControllers。但是我不知道如何添加它们以及添加它们。我尝试为“/”和“/login”添加相应的视图名称的视图控制器。但不知何故它不起作用。
有人可以在这方面启发我。我几乎浏览了 Whosebug 中的所有链接,但找不到任何东西,可能是我无法满足我的要求。
问题已通过删除 EnableWebMvc 注释解决。我不知道它的作用 ;)
我在阅读时错过了下面的文章,
我从来不想完全控制 spring MVC。我只是想实现拦截器。
情况是这样的:
为什么我要使用拦截器?
我想编写一个模块来存储有关在我的服务器上处理的所有请求的数据。这些数据对我做数据可视化有很大的帮助。
我目前使用情况如何?
@Component
public class MyCustomInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
System.out.println("In Interceptor");
return true;
}
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
System.out.println("In Post Handler");
}
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("After completion");
}
}
我正在如下注册拦截器,
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="demo.mycustom")
public class MyInterceptorConfig extends WebMvcConfigurerAdapter{
@Autowired
MyCustomInterceptor obj;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(obj);
}
}
现在的挑战是,
当我尝试登录 "localhost:8096/myApp/#/login" 时,返回 404 页面未找到。仅当我添加拦截器配置时才会观察到这一点。尽管我认为这是必需的,因为我必须告诉我的应用程序这是我要注册的拦截器。
这里可以做什么?
观察:
当我调试并看到 preHandle 内部时,有趣的一点是 "handler" 参数给了我 org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml
而当我正常使用应用程序时(没有拦截器)我得到的是 org.springframework.web.servlet.mvc.ParameterizableViewController@1bff7859
这转移了我的注意力,让我在拦截器配置中添加 addViewControllers。但是我不知道如何添加它们以及添加它们。我尝试为“/”和“/login”添加相应的视图名称的视图控制器。但不知何故它不起作用。
有人可以在这方面启发我。我几乎浏览了 Whosebug 中的所有链接,但找不到任何东西,可能是我无法满足我的要求。
问题已通过删除 EnableWebMvc 注释解决。我不知道它的作用 ;)
我在阅读时错过了下面的文章,
我从来不想完全控制 spring MVC。我只是想实现拦截器。