uatGuarduat.UatGuardFilter
uatGuard/*REQUEST\n'''+s[start:]
# Eliminate the unused Druid servlet and its embedded credentials.
s=re.sub(r'\s*druidStatView.*?','',s,flags=re.S)
s=re.sub(r'\s*druidStatView.*?','',s,flags=re.S)
write(p,s)
login=webapp/'webpage/login/login.jsp'
text=login.read_text()
if 'isolated-uat-banner' not in text:
text=text.replace('','[UAT] ')
text=re.sub(r'(]*>)',r'\1UAT 隔离测试环境 · 数据来自备份 · 外部上报已禁用
',text,count=1)
write(login,text)
cp=str(classes)+':'+str(webapp/'WEB-INF/lib/*')+':'+str(ctx/'tomcat/lib/servlet-api.jar')
subprocess.run([str(JDK/'bin/javac'),'-encoding','UTF-8','-cp',cp,'-d',str(classes),str(ROOT/'scripts/UatGuardFilter.java')],check=True)
write(ROOT/'runtime/server.xml','''
''')
for p in [ROOT/'runtime/mysql-data', ROOT/'runtime/tomcat-work', ROOT/'runtime/tomcat-logs']:
p.mkdir(exist_ok=True)
tls=ROOT/'secrets/tls';tls.mkdir(exist_ok=True)
if not (tls/'server.crt').exists():
subprocess.run(['openssl','req','-x509','-newkey','rsa:3072','-nodes','-keyout',str(tls/'server.key'),'-out',str(tls/'server.crt'),'-days','365','-subj','/CN=syly2-uat','-addext','subjectAltName=IP:192.168.68.223,DNS:localhost'],check=True,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)
write(ROOT/'evidence/runtime-manifest.json',json.dumps({'war_sha256':digest(WAR),'dump_sha256':digest(dump),'dump_bytes':dump.stat().st_size,'mysql_tar_sha256':None if app_only else digest(mysql),'mysql_vendor_md5_verified':not app_only,'tomcat_tar_sha512_verified':True,'tomcat':'9.0.123','java':'Corretto 8.512.09.1','mysql':'5.7.44'},indent=2))
print('Runtime prepared; hashes verified; credentials kept in private files.')