您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用@ControllerAdvice使简单的servlet过滤器工作

使用@ControllerAdvice使简单的servlet过滤器工作

如java servlet规范所指定,Filter总是在Servlet调用a之前执行。现在,a@ControllerAdvice仅对在中执行的控制器有用DispatcherServlet。因此,使用a Filter并期望a@ControllerAdvice在这种情况下@ExceptionHandler不会被调用

您需要将相同的逻辑放入过滤器中(用于编写JSON响应),或者代替使用HandlerInterceptor此检查的过滤器。最简单的方法是扩展HandlerInterceptorAdapter和重写并实现该preHandle方法,并将来自过滤器的逻辑放入该方法中。

public class ClientKeyInterceptor extends HandlerInterceptorAdapter {

    @Value('${CLIENT_KEY}')
    String clientKey

    @Override
    public boolean preHandle(ServletRequest req, ServletResponse res, Object handler) {
        String reqClientKey = req.getHeader('Client-Key')
        if (!clientKey.equals(reqClientKey)) {
          throw new AccessForbiddenException('Invalid API key')
        }
        return true;
    }

}
Jave 2022/1/1 18:15:59 有449人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶