我正在开发的服务有问题。 我正在使用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的请求,这将引发此异常。 任何想法如何避免这种情况?