CAS每个版本的差异很大,除了其内部实现不同,配置方式也有很大的差异。在本系列中,由于CAS 4.2.X采用了gradle作为管理工具,然而项目中使用maven,所以这里采用的CAS版本号是4.1.X,注意,版本号很重要,不然配置都对不上!!!
一、开始搭建
搭建CAS服务器有两种方式,一种是在根目录中使用maven命令编译打包,然后在cas-server-webapp模块中获取war包,部署在tomcat中;另一种是本文采用的方式,直接拷贝cas-server-webapp模块到项目中,方便修改配置和测试。
1、(如果第二步不成功的话,请回来看这一步)在cas包的根目录下,使用命令
mvn clean install -Dmaven.test.skip=true
目的是为了在本地maven仓库中有cas项目的parent pom文件
2、生成秘钥,该秘钥用于https协议
使用命令生成秘钥。秘钥存放在 D:\keystore\test.keystore。这里的密码使用123456。
keytool -genkeypair -keyalg "RSA" -keystore "D:\keystore\test.keystore"
3、拷贝cas-server-webapp模块到项目中,它以一个新module的形式存在于项目,拷贝后的项目结构如下:
添加后的模块继承的父工程仍然是cas-server,如果之前没有cas-server工程的pom文件在本地maven仓库,有可能编译cas-server-webapp时会报错。这时需要进行第一步解决问题。
<parent> <groupId>org.jasig.cas</groupId> <artifactId>cas-server</artifactId> <version>4.1.10</version> </parent>
修改cas-server-webapp模块的pom文件,因为父工程需要用该参数。
<properties>
<cs.dir>${project.basedir}</cs.dir>
</properties>
在pom.xml文件中的build节点中添加插件,让它跳过license检查
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
修改log4j2的配置,如果不修改,控制台中没有日志信息。
<Logger name="org.jasig.cas.web.flow" level="info" additivity="true">
<!--添加控制台输出-->
<AppenderRef ref="console"/>
<AppenderRef ref="file"/>
</Logger>
<Logger name="org.jasig.inspektr.audit.support.Slf4jLoggingAuditTrailManager" level="info">
<!--添加控制台输出-->
<AppenderRef ref="console"/>
<AppenderRef ref="file"/>
</Logger>
跳过checkstyle/findbugs插件,对于我来说,这两个插件特别烦
在pom文件的build节点添加,覆盖父工程的配置,跳过这两个检查
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${maven-findbugs-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
4、配置jetty。
在cas-server-webapp模块的pom文件,修改jetty-maven-plugin插件的配置
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${maven-jetty-plugin.version}</version>
<configuration>
<webApp>
<contextPath>/cas</contextPath>
</webApp>
<jettyXml>
${cs.dir}/etc/jetty/jetty.xml,${cs.dir}/etc/jetty/jetty-ssl.xml,${cs.dir}/etc/jetty/jetty-https.xml
</jettyXml>
<systemProperties>
<systemProperty>
<name>org.eclipse.jetty.annotations.maxWait</name>
<value>240</value>
</systemProperty>
</systemProperties>
<!-- Works with remote debugging and mvn jetty:run-forked -->
<jvmArgs>-Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n
</jvmArgs>
<!--<scanIntervalSeconds>10</scanIntervalSeconds>-->
<stopPort>9999</stopPort>
<reload>manual</reload>
</configuration>
</plugin>
这样jetty插件会在以下目录寻找jetty的配置文件jetty.xml、jetty-ssl.xml、jetty-https.xml
${cs.dir}/etc/jetty/jetty.xml,${cs.dir}/etc/jetty/jetty-ssl.xml,${cs.dir}/etc/jetty/jetty-https.xml
另外,配置了jetty的热启动,reload设定为人工干预自动启动,否则jetty会在scanIntervalSeconds指定的时间里扫描改动并且进行重启。当reload设定为manual后,在控制台回车jetty就会自动重启了。不过,测试了一下,配置的更改进行热启动是无效的。另外,热启动的时间稍长,注意看控制台输出。
<!--<scanIntervalSeconds>10</scanIntervalSeconds>-->
<stopPort>9999</stopPort>
<reload>manual</reload>
拷贝cas源码包中的etc文件夹到以下目录,注意要与src同级
jetty-ssl.xml文件中,配置秘钥存放路径和秘钥的密码。
<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<Set name="KeyStorePath"><Property name="jetty.ssl.keystore.path" default="F:/keystore/cas/test.keystore" /></Set>
<Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="123456" /></Set>
<Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="123456" /></Set>
</New>
jetty-ssl.xml文件中,修改http的端口号
<Set name="port"><Property name="jetty.port" default="18080" /></Set>
jetty-ssl.xml文件中,修改https的端口号
<Set name="port"><Property name="jetty.ssl.port" deprecated="ssl.port" default="18443" /></Set>
二、启动服务
分别输入http://127.0.0.1:18080/cas/login 和 https://127.0.0.1:18443/cas/login 访问cas服务
yeah。。。。胜利。
它的默认用户名密码是 casuser/Mellon
可以在deployerConfigContext.xml文件中修改用户名和密码
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="hugo" value="123456"/>
</map>
</property>
</bean>