前置文章:CAS学习教程
1 构建CAS应用
1.1 CAS下载目录说明
下载CAS源码解压后目录如下图所示:
整个源码结构以maven方式管理
cas-server-core为cas核心源码,为一个jar格式maven项目,maven构建后会生成一个jar包。
其余cas-server-*为cas扩展源码,为一个jar格式maven项目,maven构建后会生成一个jar包,可以根据自己的需要选择是否添加。
cas-server-webapp为一个cas只引入cas核心源码cas-server-core的web项目,为一个war格式的maven项目,maven构建后会生成war包。
modules 即为与上述模块一一对应的构建生成的jar以及war文件,其中cas-server-webapp-3.5.2.war即为我们前面安装用到的war 包,该war包只包含了cas最核心的源码以前端代码。如果需要引入另外的support,则可以重新构建。
1.2 CAS源码构建
1.2.1 构建war包
使用maven构建war包,上小节说道如果需要引入其他的support,则可以使用maven重新构建。如想引入jdbc验证,cmd进入到cas源码目录,输入以下命令:
mvn package -pl cas-server-webapp,cas-server-support-jdbc
意思是只需要构建cas-server-webapp和cas-server-support-jdbc,如果需要其他的请根据文件夹名称设置或者构建全部模块,打包全部模块命令:mvn package 即可。打bao 过程中会从网络下载需要的jar包,请耐心等待;如果在~/.m2/settings.xml中定义了mirror代理,那么请把随便修改一个字符,否则下载jar包会失败!
打包完成后就可以从cas-server-webapp/target/cas.war复制到你的tomcat/webapp中;或者直接复制cas-server-webapp/target/cas-server-webapp-3.5.2目录到tomcat/webapp目录下,其他步骤和上面一样,只是该war程序引入的jdbc支持。
1.2.2 构建maven项目
第一种:下载 cas server 源码后,执行:
mvn eclipse:eclipse
该命令是将当前maven项目转换成eclipse项目。
导入eclipse,这时会报错:Plugin execution not covered by lifecycle configuration:xxx plugin
解决方法:
在 cas\pom.xml 里的 build -》 pluginManagement -》 plugins 节点加入:
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<versionRange>2.10</versionRange>
<goals>
<goal>checkstyle</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.mycila.maven-license-plugin</groupId>
<artifactId>maven-license-plugin</artifactId>
<versionRange>1.9.0</versionRange>
<goals>
<goal>check</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<versionRange>1.4</versionRange>
<goals>
<goal>compile</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
第二种方法:
参考: http://jasig.github.io/cas/4.0.x/installation/Maven-Overlay-Installation.html
下载maven 模板: https://github.com/UniconLabs/simple-cas4-overlay-template/archive/master.zip
导入eclipse -》 import -》 maven -》 existing maven projects,在pom.xml加入依赖,支持访问数据库验证密码:
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-core</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<cas.version>4.0.1</cas.version>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.2.6.RELEASE</spring.version>
<javax.validation.version>1.0.0.GA</javax.validation.version>
<c3p0.version>0.9.1.2</c3p0.version>
</properties>
修改 deployerConfigContext.xml
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
</map>
</constructor-arg>
<property name="authenticationPolicy">
<bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />
</property>
</bean>
<!--
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
-->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost:3306/portal_230?useUnicode=true&characterEncoding=UTF8&noAccessToProcedureBodies=true&autoReconnect=true&zeroDateTimeBehavior=convertToNull"
p:user="root"
p:password="root" />
<!-- 密码加密方式-->
<bean id="passwordEncoder"
class="com.my.cas.authentication.handler.SelfPasswordEncoder"
c:encodingAlgorithm="SHA1"
p:characterEncoding="UTF-8" />
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from test_user where username=? "
p:passwordEncoder-ref="passwordEncoder"
/>
其中:com.my.cas.authentication.handler.SelfPasswordEncoder 为自定义的密码加密类,实现接口为:org.jasig.cas.authentication.handler.PasswordEncoder。
注:maven的安装及myeclipse下集成maven可以参考:MyEclipse下Maven的安装配置。
1.2.3 构建常规WEB项目
根据个人爱好,个人平时开发习惯还是比较习惯于常规web的项目结构,所以此处说明下如何构建常规结构的cas源码。
在MyEclipse中新建一个Web Project,名字随意,如:casserver等。
将cas核心源码cas-server-core目录下的java文件全部拷贝到新建的程序casserver程序中。
将cas-server-webapp目录下的java文件全部拷贝到新建的程序cassercer程序中。
将modules下cas-server-webapp-3.5.2.war解压,将WEB-INF/lib下的jar包全部拷到新建程序casserver中lib下、将WEB-INF/classes下一堆xml、properties等配置文件拷贝到src下,其余的文件全部拷到WebRoot下。
此时cas基础程序源码就搭建完成,如果想引入其他支持,直接拷贝相应jar包到lib下并修改相应配置即可。
后续开发和常规web开发一样,cas源码使用架构是SpringMVC和spring-webflow技术,可以在该源码基础上对cas做二次开发,如:增加验证码、记录登录日志、设置集成权限、CA证书集成等。
下图为构建好的常规web项目结构图: