Java 弹簧防尘套过滤器don';t返回正确的响应

Java 弹簧防尘套过滤器don';t返回正确的响应,java,spring,spring-boot,jersey,jax-rs,Java,Spring,Spring Boot,Jersey,Jax Rs,我正在开发一个spring boot应用程序,我正在关注这一点, 尽管需要进行一些调整以使其在spring boot上工作,但所有这些都可以正常工作,但问题是当我调用: requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build()); 它返回“404NotFound”而不是“401Unauthorized”,调用该方法,它捕获异常,但返回错误的状态 Obs:如果我移除过滤器的约束,它将正常工作 过滤

我正在开发一个spring boot应用程序,我正在关注这一点, 尽管需要进行一些调整以使其在spring boot上工作,但所有这些都可以正常工作,但问题是当我调用:

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
它返回“404NotFound”而不是“401Unauthorized”,调用该方法,它捕获异常,但返回错误的状态

Obs:如果我移除过滤器的约束,它将正常工作

过滤器:

@Secured
@Provider
@Component
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {

    String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);

    if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
        throw new NotAuthorizedException("Authorization header must be provided");
    }

    String token = authorizationHeader.substring("Bearer".length()).trim();

    try {

        validateToken(token);

    } catch (Exception e) {
        requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
    }
}

private void validateToken(String token) throws Exception {
}
}
资源:

@Component
@Path("/")
public class Hello {

@Secured
@GET
@Path("/hello")
public String test() {
    return "Hello!";
}
@GET
@Path("/world")
public String world() {
    return "World!";
}
}

我假设您正在使用Jersey API构建RESTful接口。您收到的404与(我认为)路径(泽西岛)或请求映射(spring)有关

如果您发布更多与API路径相关的代码,那么我们可以进一步提供帮助

多谢各位

如果您查看顶层路径
@path(“/”
)。您正在添加另一个正斜杠,以便uri最终看起来像:

http://localhost.com//hello
http://localhost.com//world

要修复此问题,请从方法
@Path
注释中删除正斜杠,然后重新生成。这将导致API端点看起来像

http://localhost.com/hello

http://localhost.com/world

我假设您正在使用Jersey API构建RESTful接口。您收到的404与(我认为)路径(泽西岛)或请求映射(spring)有关

如果您发布更多与API路径相关的代码,那么我们可以进一步提供帮助

多谢各位

如果您查看顶层路径
@path(“/”
)。您正在添加另一个正斜杠,以便uri最终看起来像:

http://localhost.com//hello
http://localhost.com//world

要修复此问题,请从方法
@Path
注释中删除正斜杠,然后重新生成。这将导致API端点看起来像

http://localhost.com/hello

http://localhost.com/world

这不是问题,两个端点都在工作,“world”方法正常返回字符串,hello被过滤器截获,问题是过滤器没有返回正确的响应,如果我删除过滤器上的if,“hello”方法正常工作。(spring boot可以使用或不使用额外的“/”,我刚刚测试过)。您可以添加相关的筛选代码吗?这已经是个问题了。为什么validate token应该在什么都没有发生的情况下抛出异常?我正在测试此方法是否有效。这不是问题,两个端点都在工作,“world”方法正常返回字符串,而hello被过滤器截获,问题是过滤器没有返回正确的响应,如果我删除过滤器上的if,“hello”方法正常工作。(spring boot可以使用或不使用额外的“/”,我刚刚测试过)。您可以添加相关的筛选代码吗?已经有问题了。为什么validate token应该在什么都没有发生的情况下抛出异常?我正在测试此方法是否有效。请尝试使用,非常感谢,请做一个正确的回答,这样我就可以选择你的答案。而不是像一个傻瓜一样关闭它:-)用例可能不一样,但原因是一样的。尝试像一个符咒一样工作谢谢,请做一个正确的回答,这样我就可以选择你的答案。而不是像傻瓜一样关闭它:-)用例可能不一样,但原因是一样的。