cas-server-webapp 源碼,升級版本時改動難合併、維護者換人即斷檔。my-cas-server,以 cas-server-webapp 為 WAR 依賴,通過 Maven War Plugin 的 <overlays> 覆蓋同名文件,實現「不改源碼、配置即代碼、升級無感」。pom.xml 核心依賴
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
<version>3.4.11</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
</plugins>
</build>
原理:打包時先解壓依賴 WAR,再將本項目同名文件覆蓋過去,最終產出合併後的 WAR。
將原項目中已修改的文件按相同目錄結構複製到 my-cas-server/src/main/webapp/...:
src/main/
├── java/
│ └── org/jasig/cas/
│ ├── authentication/principal/UsernamePasswordCredentials.java
│ └── web/flow/AuthenticationViaFormAction.java
└── webapp/
├── WEB-INF/
│ ├── classes/
│ │ ├── cas-theme-default.properties
│ │ ├── default_views.properties
│ │ └── messages_zh_CN.properties
│ ├── spring-configuration/ticketRegistry.xml
│ ├── cas-servlet.xml
│ ├── deployerConfigContext.xml
│ ├── login-webflow.xml
│ └── web.xml
└── view/jsp/default/ui/casLoginView.jsp (自定義登錄頁)
mvn clean package 生成 my-cas-server.warsrc/main/webapp/WEB-INF/jsp/login.jsp 編寫全新頁面default_views.properties:casLoginView.url=/WEB-INF/jsp/login.jsp| 維度 | 傳統改源碼 | Maven Overlay |
|---|---|---|
| 升級成本 | 極高(手工合併) | 低(升級版本號即可) |
| 版本控制 | 混雜在 fork 代碼中 | 僅保留差異文件,Git 歷史清晰 |
| 團隊協作 | 新人難上手 | 標準 Maven 項目,零學習成本 |
| 自由度 | 受限於原項目結構 | 任意新增 Controller、JSP、Filter、Listener |
cas-server-webapp WAR Overlaycas-overlay-template(Gradle/Maven 雙模板),原理相同採用 Overlay 模式,讓 CAS 客製化從「魔改源碼」進化為「標準化擴展」,是專業團隊的必選方案。