import zipfile, os, shutil PROJ = "D:/SoftProject/yunhai/CasSso/cas-overlay-template-5.3" WAR = os.path.join(PROJ, "docker/cas.war") # (entry_name_in_war, local_source_file) REPL = [ ("WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController.class", os.path.join(PROJ, "target/cas/WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController.class")), ("WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController$LocalAuthenticationResult.class", os.path.join(PROJ, "target/cas/WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController$LocalAuthenticationResult.class")), ("front/index.html", os.path.join(PROJ, "src/main/webapp/front/index.html")), ] repl_map = {name: open(src, "rb").read() for name, src in REPL} tmp = WAR + ".tmp" zin = zipfile.ZipFile(WAR) zout = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) for item in zin.infolist(): if item.filename in repl_map: zout.writestr(item, repl_map[item.filename]) else: zout.writestr(item, zin.read(item.filename)) zin.close() zout.close() shutil.move(tmp, WAR) z = zipfile.ZipFile(WAR) print("testzip:", z.testzip()) html = z.read("front/index.html").decode("utf-8", "replace") print("has pwdMgrForm:", "pwdMgrForm" in html) print("has name=\"username\":", 'name="username"' in html) print("has name=\"password\":", 'name="password"' in html) cls = z.read("WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController.class") print("default url in class:", b"front/index.html" in cls) print("entries replaced OK")