spring-boot 拦截器不拦截
Posted
技术标签:
【中文标题】spring-boot 拦截器不拦截【英文标题】:spring-boot interceptor is not intercepting 【发布时间】:2018-08-09 21:19:04 【问题描述】:我为我的 spring-boot 应用程序编写了一个拦截器。但是当我到达端点时,它执行得很好。拦截器无法拦截我的请求。 我哪里出错或遗漏了什么?
下面是代码
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter
private static final String PATHS = "/services/api/**";
@Autowired
private AuthorizationInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(authInterceptor).addPathPatterns(PATHS);
这是 Interceptor::: 的代码
@Component
public class AuthorizationInterceptor implements HandlerInterceptor
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationInterceptor.class);
private static final String MSG_BAD_INPUT = "Very Bad Input";
private static final int MAX_URI_LENGTH = 4;
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception
// TODO Auto-generated method stub
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception
// TODO Auto-generated method stub
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
System.out.println("Inside Prehandle:::::::------->");
this.checkURILength(request);
System.out.println("After checking:::::::::::---->");
return true;
private void checkURILength(HttpServletRequest request)
if (request.getRequestURI().length() > MAX_URI_LENGTH)
LOGGER.error("Request URI is too long");
throw new InvalidInputException(MSG_BAD_INPUT);
现在当我点击我的 spring-boot 应用程序的端点时,它工作正常
http://localhost:8181/services/api/companies
基本上它根本不调用预句柄。 我错过了什么????
【问题讨论】:
但是当我将`PATHS = "/services/api/**"` 更改为PATHS = "/**"
时,它能够拦截请求,但我不明白为什么它会因上述原因而失败
你应该列出你的依赖。可能别人出问题了
【参考方案1】:
你用过@EnableWebMvc
吗
@EnableWebMvc
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter
...
【讨论】:
很有趣,没有addPathPatterns()
也能正常工作吗?
我知道我只是好奇这可能会导致一些问题,但那不应该。顺便说一句,您是否从 xml 中的拦截器创建了一个 bean?请尝试以下方法,而不是 @Autowired
` @Bean AuthorizationInterceptor authorizationInterceptor () return new AuthorizationInterceptor (); registry.addInterceptor(authorizationInterceptor()).addPathPatterns(PATHS);` 编辑:抱歉代码格式化...:D
如果我将 PATHS = "/services/api/**"` 更改为 PATHS = "/**" 它能够拦截请求,但我不明白为什么它会失败以上
你有一个控制器来处理这个请求吗?例如@RequestMapping(value = "/services/api/something")
以上是关于spring-boot 拦截器不拦截的主要内容,如果未能解决你的问题,请参考以下文章