java在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
这转移了我的注意力,在拦截器配置中添加了AddViewController。但我不知道如何添加它们以及添加什么。我尝试为“/”和“/登录”添加一个视图控制器,并相应地使用视图名称。但不知怎么的,它不起作用
有人能在这方面启发我吗。我已经浏览了stackoverflow上的几乎所有链接,但找不到任何内容,可能是我无法满足我的要求
# 1 楼答案
通过删除EnableWebMvc注释可以解决这个问题。我不知道它是干什么的;)
我在阅读时错过了下面这篇文章
我从来都不想完全控制spring MVC。我只是想实现拦截器