当前位置:   article > 正文

SpringBoot 自定义拦截器 HandlerInterceptor 方法没有生效_handlerinterceptor没有生效

handlerinterceptor没有生效

 在springBoot 中我自定义了一个拦截器,通过实现:HandlerInterceptor 接口

  1. package com.abs.system.filter;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.web.method.HandlerMethod;
  8. import org.springframework.web.servlet.HandlerInterceptor;
  9. import org.springframework.web.servlet.ModelAndView;
  10. import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
  11. import com.abs.system.util.AbsSessionHelper;
  12. import com.abs.system.util.BuildJsonOfObject;
  13. import com.abs.system.util.MSG;
  14. import com.abs.system.util.StrUtil;
  15. /**
  16. * 拦截器
  17. *
  18. * @author wdg
  19. *
  20. */
  21. public class AbsHandlerInterceptor implements HandlerInterceptor {
  22. private Logger logger = LoggerFactory.getLogger(AbsHandlerInterceptor.class);
  23. long start = System.currentTimeMillis();
  24. @Override
  25. public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,Object handler) throws Exception {
  26. if (handler instanceof HandlerMethod) {
  27. HandlerMethod h = (HandlerMethod) handler;
  28. logger.info("当前请求接口:{}",h.getMethod().getName());
  29. if (h.hasMethodAnnotation(NoNeedLogin.class)) {
  30. return true;
  31. } else {
  32. String token = httpServletRequest.getHeader("Authorization");
  33. if (StrUtil.isNotBlank(AbsSessionHelper.getCurrentUserGuid(token))) {
  34. return true;
  35. } else {
  36. httpServletResponse.setContentType("application/json");
  37. PrintWriter writer=httpServletResponse.getWriter();
  38. writer.write(BuildJsonOfObject.getJsonString(MSG.fail, MSG.NOLOGIN).toJSONString());
  39. return false;
  40. }
  41. }
  42. } else if (handler instanceof ResourceHttpRequestHandler) {
  43. return true;
  44. } else {
  45. return true;
  46. }
  47. }
  48. @Override
  49. public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
  50. Object handler, ModelAndView modelAndView) throws Exception {
  51. System.out.println(start);
  52. }
  53. @Override
  54. public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
  55. Object o, Exception e) throws Exception {
  56. System.out.println("***********");
  57. }
  58. }

什么原因,原来我为了解决跨域和资源的访问,实现了:WebMvcConfigurationSupport 

  1. package com.abs.system.filter;
  2. import java.util.List;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  5. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  6. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  7. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  8. import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
  9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  10. @Configuration
  11. public class AbsWebMvcConfigurerAdapter extends WebMvcConfigurationSupport {
  12. @Override
  13. protected void addViewControllers(ViewControllerRegistry registry) {
  14. registry.addRedirectViewController("/", "canvas/index.html");
  15. registry.addRedirectViewController("/index", "canvas/index.html");
  16. registry.addRedirectViewController("/index.html", "canvas/index.html");
  17. }
  18. @Override
  19. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  20. registry.addResourceHandler("/canvas/**").addResourceLocations("classpath:/templates/");
  21. registry.addResourceHandler("/www/**").addResourceLocations("classpath:/www/");
  22. registry.addResourceHandler("/db/**").addResourceLocations("classpath:/db/");
  23. registry.addResourceHandler("/font/**").addResourceLocations("classpath:/font/");
  24. }
  25. @Override
  26. public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
  27. super.addArgumentResolvers(argumentResolvers);
  28. argumentResolvers.add(new AbsHandlerMethodArgumentResolver());
  29. }
  30. @Override
  31. public void addCorsMappings(CorsRegistry registry) {
  32. // 添加映射路径
  33. registry.addMapping("/**")
  34. // 是否发送Cookie
  35. .allowCredentials(true)
  36. // 设置放行哪些原始域 SpringBoot2.4.4下低版本使用.allowedOrigins("*")
  37. .allowedOrigins("*")
  38. // 放行哪些请求方式
  39. .allowedMethods(new String[] { "GET", "POST", "PUT", "DELETE" })
  40. // .allowedMethods("*") //或者放行全部
  41. // 放行哪些原始请求头部信息
  42. .allowedHeaders("*");
  43. }
  44. }

为了能走拦截器,我需要把我的拦截器加入到SpringBoot 的拦截器列表中

需要在AbsWebMvcConfigurerAdapter  重新 :addInterceptors 方法

如下:

  1. package com.abs.system.filter;
  2. import java.util.List;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  5. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  6. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  7. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  8. import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
  9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  10. @Configuration
  11. public class AbsWebMvcConfigurerAdapter extends WebMvcConfigurationSupport {
  12. @Override
  13. protected void addViewControllers(ViewControllerRegistry registry) {
  14. registry.addRedirectViewController("/", "canvas/index.html");
  15. registry.addRedirectViewController("/index", "canvas/index.html");
  16. registry.addRedirectViewController("/index.html", "canvas/index.html");
  17. }
  18. @Override
  19. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  20. registry.addResourceHandler("/canvas/**").addResourceLocations("classpath:/templates/");
  21. registry.addResourceHandler("/www/**").addResourceLocations("classpath:/www/");
  22. registry.addResourceHandler("/db/**").addResourceLocations("classpath:/db/");
  23. registry.addResourceHandler("/font/**").addResourceLocations("classpath:/font/");
  24. }
  25. @Override
  26. public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
  27. super.addArgumentResolvers(argumentResolvers);
  28. argumentResolvers.add(new AbsHandlerMethodArgumentResolver());
  29. }
  30. @Override
  31. public void addCorsMappings(CorsRegistry registry) {
  32. // 添加映射路径
  33. registry.addMapping("/**")
  34. // 是否发送Cookie
  35. .allowCredentials(true)
  36. // 设置放行哪些原始域 SpringBoot2.4.4下低版本使用.allowedOrigins("*")
  37. .allowedOrigins("*")
  38. // 放行哪些请求方式
  39. .allowedMethods(new String[] { "GET", "POST", "PUT", "DELETE" })
  40. // .allowedMethods("*") //或者放行全部
  41. // 放行哪些原始请求头部信息
  42. .allowedHeaders("*");
  43. }
  44. @Override
  45. public void addInterceptors(InterceptorRegistry interceptor) {
  46. interceptor.addInterceptor(new AbsHandlerInterceptor()).addPathPatterns("/**");
  47. }
  48. }

这样再次走接口的时候,就会走拦截器了

希望对你有多帮助

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/173046
推荐阅读
相关标签
  

闽ICP备14008679号