gpt4 book ai didi

java - Spring Boot 过滤器未返回正确的响应

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:59 25 4
gpt4 key购买 nike

我正在开发一个 Spring Boot 应用程序,我正在关注这个 reply ,尽管需要进行一些调整才能使其在 Spring Boot 上工作,但一切都工作正常,但问题是当我调用时:

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());

它返回“404 Not Found”而不是“401 Unauthorized”,调用该方法,它捕获异常但返回错误的状态。

观察:如果我删除过滤器的约束,它就会正常工作。

过滤器:

@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 接口(interface)。您收到的 404 与(我认为)@Path (Jersey) 或 @RequestMapping (spring) 相关。

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

谢谢。

如果您查看顶级路径@Path("/")。您要添加另一个正斜杠,以便 uri 最终看起来像这样:

http://localhost.com//hellohttp://localhost.com//world

要解决此问题,请从方法 @Path 注释中删除正斜杠,然后重建。这应该会导致 API 端点看起来像

http://localhost.com/hellohttp://localhost.com/world

关于java - Spring Boot 过滤器未返回正确的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34668294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com