cas的overlay插件的理解以及内置的tomcat升级记录

参考文档:https://blog.csdn.net/hewusheng10/article/details/108328013

最近参与的门户项目中,涉及到多个业务系统单点登录功能,于是使用了cas作为单点登录统一认证门户。 而cas-server 采用的5.3的springboot版本,在安全验收过程中,发现cas内置的tomcat版本存在漏洞,需要进行tomcat升级。通过文档收集大部分建议直接对cas进行整体升级,然而由于cas已经上线,本着最小范围影响原则,所以我们采用了cas的内置tomcat版本升级。操作步骤如下:

第一步: 理解cas的pom中overlay插件的使用:

cas与springboot的融合,主要通过MAVEN的overlay插件,将cas-server源码项目和cas-server-webapp-tomcat进行合并。

overlay插件是用户多个web项目的war包合并,被依赖的war包会根据pom中的配置以及主项目的现有文件进行合并。用途:1.大型web项目的并行开发。在分布式的趋势下,这个用途应该不多了。2.基于他人项目的修改,比如:cas本身用来做登陆权限的中央认证,其中项目源码非常之多,但本身必须是一个持续运行在服务器上的web项目,对于开发者而言只是需要在cas代码上根据业务做一些修改,涉及到的文件可能只有三四个,而其他多余的东西完全用不到,这就会导致项目看起来十分累赘、冗余。时间一久也忘了几十上百个文件中到底修改了那些。
而使用overlay插件的好处在于:1.项目看起来更加清爽。2.因为项目中的已有的文件就是自己定义的文件,即使是后面接手的人,也一目了然、便于维护。3.提高开发效率,若用传统方式需要提取所以文件到项目,一旦漏掉哪个就会导致报错,编写代码也不会因为代码文件太多太庞大,导致编译工具卡顿,最终运行的版本会在项目运行时先合并再编译运行。
以cas4.0.3为例,左边传统方式,右边使用overlay插件

可以看出项目立即变得清爽,需要自定义什么内容,只需要在项目中创建对应目录结构下的同名文件即可。
在这里插入图片描述
overlay插件的用法

1.首先创建一个干净清爽的maven webapp项目
在这里插入图片描述
2.打开pom文件加入overlay的插件,将overlay里面的war包依赖加入到dependencies中:

其中标签下可以加入多个也就是支持多个war包的合并,填写时只需写入和不需要版本号。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warName>cas</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <recompressZippedFiles>false</recompressZippedFiles>
                    <archive>
                        <compress>false</compress>
                        <manifestFile>${manifestFileToUse}</manifestFile>
                    </archive>
                    <overlays>
                        <overlay>
                            <groupId>org.apereo.cas</groupId>
                            <artifactId>cas-server-webapp${app.server}</artifactId>
                            <excludes>
                                <exclude>WEB-INF/lib/tomcat*</exclude>
                            </excludes>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>

3.此时项目中会多一个overlay的目录:

需要修改什么内容,则参照overlay里面的结构去创建同样的目录和文件即可,如各种filter和spring的配置文件的扫描路径是通用的
在这里插入图片描述
4、自定义一个登陆界面

直接替换WEB-INF/view/jsp/default/ui/casLoginView.jsp即可完成对登陆界面的修改。

先创建一个同目录下的同名文件,直接重写即可替换:
在这里插入图片描述
5、includes与excludes的用法

overlay下的exclude下匹配的文件不会出现在最终合并target中,也就是启动环境中去。这个可以用于一些主项目用不到的资源文件可以用exclude直接移除掉。

overlay下若有include的配置,则最终合并的文件只包含include下匹配的文件
include用于让开发者去灵活选择overlay中只需要用到的资源。

6、dependentWarIncludes与dependentWarExcludes这两个和include与exclude用法一致,前者配置只合并的文件,后者配置不合并的文件。那么和include与exclude的区别是啥呢?
先看pom用法:

 <configuration>
          <overlays>
            <overlay>
              <groupId>org.jasig.cas</groupId>
              <artifactId>cas-server-webapp</artifactId>
              <includes>
              <include>WEB-INF/view/jsp/**</include>
              </includes>
            </overlay>
          </overlays>
          <!--<dependentWarIncludes>WEB-INF/web.xml</dependentWarIncludes>-->
          <dependentWarIncludes>WEB-INF/**</dependentWarIncludes>
          <dependentWarExcludes>WEB-INF/view/jsp/default/ui/casLogoutView.jsp</dependentWarExcludes>
</configuration>

可以看到用法是直接写在configuration节点下,也就是说,这个配置对所有overlay都起作用,前提是overlay下没有include与exclude,也就是说dependentWarIncludes和dependentWarExcludes是全局作用,每个overlay下的war包都会被应用到该配置,但是优先级要低于include与exclude。

第二步: 确认cas内置tomcat升级

1、查询cas中的tomcat依赖内容,通过mvn打包后,查询war包涉及的tomcat依赖
在这里插入图片描述
2、查找cas内置的tomcat来源。

通过pom中查询cas并没有直接引入tomcat相关包,于是通过pom怀疑,tomcat相关依赖包由 相关的war包依赖合并而来。通过项目中的 overlays目录下,相关合并的war包(org.apereo.cas.cas-server-webapp-tomcat-5.3.16)内的\WEB-INF\lib 目录查找到tomcat相关依赖。
在这里插入图片描述
3、在cas的pom中引入org.apereo.cas.cas-server-webapp-tomcat-5.3.16包相关的tomcat依赖,确保tomcat相关依赖已引入升级版本

<!--额外增加的tomcat版本-->
                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-core</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-catalina</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-coyote</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-el-api</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-jasper</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jaspic-api</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jni</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-juli</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-servlet-api</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-tribes</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-util</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-util-scan</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-api</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-catalina-ha</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jsp-api</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-el</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-websocket</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                    <version>${tomcat.version}</version>
                </dependency>

通过打包发现,cas内置的tomcat相关依赖,两个版本同时存在,说明tomcat新版本引入成功,接下来是删除原有旧的依赖版本
在这里插入图片描述
3、overlay下的exclude移除旧的内置tomcat依赖

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warName>cas</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <recompressZippedFiles>false</recompressZippedFiles>
                    <archive>
                        <compress>false</compress>
                        <manifestFile>${manifestFileToUse}</manifestFile>
                    </archive>
                    <overlays>
                        <overlay>
                            <groupId>org.apereo.cas</groupId>
                            <artifactId>cas-server-webapp${app.server}</artifactId>
                            <excludes>
                                <exclude>WEB-INF/lib/tomcat*</exclude>
                            </excludes>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>

4、验证,cas内置依赖中,旧的tomcat依赖已删除。升级为新的tomcat依赖
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值