春天不处理未映射的端点

时间:2018-07-11 16:52:33

标签: java spring spring-mvc spring-boot

我正在开发的服务有问题。 我正在使用spring-boot 2。

我正在尝试使用拦截器,以便在我的服务中添加安全级别。安全服务检查客户端是否可以向我当前正在开发的服务发出请求。 我基本上只是遵循我在其他服务中找到的当前解决方案,即:

@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {

   @Autowired
   private final SecurityApi securtityApi;

   @Override
   public boolean preHandle(final HttpServletRequest httpServletRequest,
                                                 final HttpServletResponse httpServletResponse,
                                                 final Object handler) throws Exception {

   final String path = httpServletRequest.getRequestURI();
   final String httpMethod = httpServletRequest.getMethod();
   final Map<String, List<String>> headers = Headers.getAllHeaders(httpServletRequest);

   final Optional<SecurityApiValidationResponse> validationResponse = Optional.ofNullable(securityApi.validateRequest(path, httpMethod, headers));

   validationResponse.filter(SecurityApiValidationResponse::isAllowed)
                        .orElseThrow(() -> new UnauthorizedException(ErrorCodes.UNAUTHORIZED));

   return true;
}

我的问题是,当我向未映射的端点发出请求时,会抛出此UnauthorizedException,并且我的建议未对其进行处理,后来弹簧重定向到“ / error” 在较早版本的spring-boot中(例如1.4),spring以某种方式处理了这种情况,返回了Not Found的响应,从而避免了对未映射端点的请求,以达到拦截器级别。 (只有重定向到“ /错误”时,它才能到达) 在spring-boot 2中不会发生这种情况,拦截器会收到对未映射enpoint的请求,这将引发此异常。 任何想法如何避免这种情况?

0 个答案:

没有答案