Java 如何向Grizzly服务器添加过滤器?
我创建了一个返回JSON的Grizzly服务器。它工作得很好:Java 如何向Grizzly服务器添加过滤器?,java,authentication,redirect,grizzly,whitelist,Java,Authentication,Redirect,Grizzly,Whitelist,我创建了一个返回JSON的Grizzly服务器。它工作得很好: final ResourceConfig resourceConfig = new ResourceConfig().packages("com.mypackage"); resourceConfig.setApplicationName("My-Service"); resourceConfig.register(JacksonJaxbJsonProvider.class); server = Gr
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
等效位置),则响应302/重定向https
- 如果
不在白名单上,则响应403/禁止x-forwarded-for
@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-proto
和x-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()中的索引。添加(-筛选器应位于HttpServerFilter之前,因为它返回停止操作。更新:
这是可行的,尽管它可能不是应该如何设置的:
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()中的索引。添加(-筛选器应该在HttpServerFilter之前,因为它返回停止操作。有趣,我将尝试一下!但是“您的”
传输和“我的”服务器”
如何连接?感谢更新!现在我开始理解了。有趣的是,我将尝试一下!但是“您的”如何连接传输
和“我的”服务器
已连接?感谢您的更新!现在我开始理解了。