This commit is contained in:
yumoqing 2025-07-18 14:04:03 +08:00
parent 0b2584d6aa
commit 227533d01d
4 changed files with 28 additions and 5 deletions

View File

@ -21,11 +21,7 @@ from appPublic.rsawrap import RSA
from appPublic.log import info, debug, warning, error, critical, exception from appPublic.log import info, debug, warning, error, critical, exception
def get_client_ip(obj, request): def get_client_ip(obj, request):
ip = request.headers.get('X-Forwarded-For') return request['client_ip']
if not ip:
ip = request.remote
request['client_ip'] = ip
return ip
async def get_session_userinfo(request): async def get_session_userinfo(request):
d = await auth.get_auth(request) d = await auth.get_auth(request)

View File

@ -20,12 +20,14 @@ from .globalEnv import initEnv
from .serverenv import ServerEnv from .serverenv import ServerEnv
from .filestorage import TmpFileRecord from .filestorage import TmpFileRecord
from .loadplugins import load_plugins from .loadplugins import load_plugins
from .real_ip import real_ip_middleware
class AHApp(web.Application): class AHApp(web.Application):
def __init__(self, *args, **kw): def __init__(self, *args, **kw):
kw['client_max_size'] = 1024000000 kw['client_max_size'] = 1024000000
super().__init__(*args, **kw) super().__init__(*args, **kw)
self.user_data = DictObject() self.user_data = DictObject()
self.middlewares.insert(0, real_ip_middleware())
def set_data(self, k, v): def set_data(self, k, v):
self.user_data[k] = v self.user_data[k] = v

24
ahserver/real_ip.py Normal file
View File

@ -0,0 +1,24 @@
from appPublic.log import exception, debug, error
from aiohttp import web
from aiohttp_middlewares.annotations import DictStrStr, Handler, Middleware
def real_ip_middleware() -> Middleware:
@web.middleware
async def middleware(
request: web.Request, handler: Handler
) -> web.StreamResponse:
match_header_keys = [
"X-Forwarded-For",
"X-real-ip"
]
request['client_ip'] = request.remote
for k,v in request.headers.items():
if k in match_header_keys:
v = v.split(',')[-1].strip()
request['client_ip'] = v
break
return await handler(request)
return middleware

View File

@ -18,6 +18,7 @@ install_requires =
aiohttp==3.10.10 aiohttp==3.10.10
aiohttp_session aiohttp_session
aiohttp_auth_autz aiohttp_auth_autz
aiohttp-middlewares
aiohttp-cors aiohttp-cors
aiomysql aiomysql
aioredis aioredis