如何通过瓶中的路由过滤IP地址?
How to filter IP addresses by route in bottle?
我的 bottle
网络服务器提供多种服务(路由)。其中一些必须仅限于私有 (RFC1918) IP,而其他一些则同时服务于私有 IP 和 public。
现在我在路线的开头检查
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
# code for private service
我需要检查每条限制为私有 IP 的路由(10 个案例,并且还在增加),不需要为私有 IP 和 public 个(1 个案例)执行此操作。
是否有全局过滤器可以添加决策树?
我正在 python 应用程序中专门寻找一种方法,而不是通过例如一个上游过滤反向代理。
我不知道有什么内置的,但你可以使用 decorator 来做到这一点。 Return 来自装饰器的包装器,它执行 IP 类型检查,如果检查通过则 returns 执行常规视图,否则执行 error-message(或类似)。
以下应该有效:
def private_only(route):
def wrapper(*args, **kwargs):
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
return route(*args, **kwargs)
else:
return "Not allowed!"
return wrapper
然后用它来装饰你的私有视图:
@route('/my/internal/route')
@private_only
def internal_view():
return some_data()
我的 bottle
网络服务器提供多种服务(路由)。其中一些必须仅限于私有 (RFC1918) IP,而其他一些则同时服务于私有 IP 和 public。
现在我在路线的开头检查
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
# code for private service
我需要检查每条限制为私有 IP 的路由(10 个案例,并且还在增加),不需要为私有 IP 和 public 个(1 个案例)执行此操作。
是否有全局过滤器可以添加决策树?
我正在 python 应用程序中专门寻找一种方法,而不是通过例如一个上游过滤反向代理。
我不知道有什么内置的,但你可以使用 decorator 来做到这一点。 Return 来自装饰器的包装器,它执行 IP 类型检查,如果检查通过则 returns 执行常规视图,否则执行 error-message(或类似)。 以下应该有效:
def private_only(route):
def wrapper(*args, **kwargs):
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
return route(*args, **kwargs)
else:
return "Not allowed!"
return wrapper
然后用它来装饰你的私有视图:
@route('/my/internal/route')
@private_only
def internal_view():
return some_data()