作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 Spring Boot 1.x 升级到 Spring Boot 2.0,我注意到我的 HandlerInterceptor
开始出现类转换错误。
例如,在一个 HandlerInterceptor
中,我查看 Controller 方法/端点是否使用 @AdminOnly
注释以限制对某些端点的访问。
@Component
public class AdminOnlyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpRequest, HttpServletResponse httpResponse, Object handler) {
HandlerMethod hm = (HandlerMethod) handler;
Method method = hm.getMethod();
if (method.getDeclaringClass().isAnnotationPresent(RestController.class) && (method.isAnnotationPresent(AdminOnly.class) || method.getDeclaringClass().isAnnotationPresent(AdminOnly.class))) {
// Some Logic returning true or false
}
return true;
}
}
这在 Spring Boot 1.5.x
中有效。
升级后出现以下异常:
java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod
我在 migration guide 中找不到任何相关内容.我怎样才能升级但保持上面的拦截器工作?
最佳答案
似乎 Spring Boot 2.x 拦截器现在也处理静态资源请求,因此现在需要在注册拦截器时手动排除这些请求,如下所示:
@Configuration
public class ControllerConfiguration implements WebMvcConfigurer {
private final AdminOnlyInterceptor adminInterceptor;
@Autowired
public ControllerConfiguration(AdminInterceptor adminInterceptor) {
this.adminInterceptor = adminInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(adminInterceptor)
.addPathPatterns("/rest-api-root/**"); // White list paths
//.excludePathPatterns("/static-resource-root/**"); // Black list paths
}
}
关于java - Spring Boot 2.0拦截请求的HandlerMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460730/
public class AnnotationInterceptor extends HandlerInterceptorAdapter implements InitializingBean {
HandlerInterceptor 定义以下方法: public boolean preHandle(HttpServletRequest request, HttpServletResponse
将 JSON 数据从 JSP 传递到 ResponseBody 中的 Controller 时出错。 07:13:53.919 DEBUG o.s.w.s.m.m.a.ExceptionHandler
我是一名优秀的程序员,十分优秀!