我创建了一个返回JSON的Grizzly服务器。它工作得很好:
final ResourceConfig resourceConfig = new ResourceConfig().packages("com.mypackage");
resourceConfig.setApplicationName("My-Service");
resourceConfig.register(JacksonJaxbJsonProvider.class);
server = GrizzlyHttpServerFactory.createHttpServer(uri, resourceConfig);
我需要过滤器
x-forwarded-proto
为http
(位置设置为等效的https
),则回复302 /重定向x-forwarded-for
不在白名单上现在我做这样的检查:
@Path( “V1”) 公共课门面{
@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-proto
和x-forwarded-for
检查不是防弹,但总比没有好。)
答案 0 :(得分:0)
更新: 这是有效的,虽然它可能不是应该如何设置的:
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动作。