gpt4 book ai didi

java - 如何向 Grizzly 服务器添加过滤器?

转载 作者:太空宇宙 更新时间:2023-11-04 11:05:20 27 4
gpt4 key购买 nike

我创建了一个返回 JSON 的 Grizzly 服务器。效果很好:

    final ResourceConfig resourceConfig = new ResourceConfig().packages("com.mypackage");
resourceConfig.setApplicationName("My-Service");
resourceConfig.register(JacksonJaxbJsonProvider.class);
server = GrizzlyHttpServerFactory.createHttpServer(uri, resourceConfig);

我需要过滤器

  • 检查授权 header 是否包含有效 key
  • 如果 x-forwarded-protohttp(位置设置为 https 等效项),则响应 302/redirect
  • 如果 x-forwarded-for 不在白名单上,则响应 403/forbidden

现在我会像这样进行这些检查:

@Path("v1")
public class Facade {

@GET
@Path("/getinfo/{infotype}")
@Produces(MediaType.APPLICATION_JSON)
public Response getNextPwc(@HeaderParam("authorization") String authorizationKey,
@Context Request request,
@HeaderParam("x-forwarded-proto") String xForwardedProto,
@HeaderParam("x-forwarded-for") String xForwardedFor,
@PathParam("infotype") String infoType) {
Response errorResponse = getErrorResponse(authorizationKey, request, xForwardedFor, xForwardedProto);
if (errorResponse != null) {
return errorResponse;
}
... start work with infoType here ...

它有效 - 服务器行为正确 - 但代码位于错误的位置(我必须记住将其添加到所有新方法中),因此我想将其移至过滤机制。

非常感谢任何帮助。

(我知道 x-forwarded-protox-forwarded-for 检查不是防弹的,但总比没有好。)

最佳答案

更新:这是可行的,尽管它可能不是应该如何设置的:

final HttpServer server = new HttpServer();

final NetworkListener networkListener = new NetworkListener(
"secured-listener",
"0.0.0.0",
9191
);
server.addListener(networkListener);
server.start();

networkListener.getFilterChain().add(5, new BaseFilter(){
@Override
public NextAction handleRead(FilterChainContext ctx) throws IOException {
return super.handleRead(ctx);
}
});
System.in.read();

注意 getFilterChain().add( 中的索引 - 过滤器应该位于 HttpServerFilter 之前,因为它返回 STOP 操作。

关于java - 如何向 Grizzly 服务器添加过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46535777/

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