使用的版本是 CAS-4.1.0(文后附有需要修改的完整代码)
一、修改使用HTTP连接
1、在cas-server-webapp中的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml文件中有如下配置:
<!--cookieSecure 是否启用https-->
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
c:casCookieValueManager-ref="cookieValueManager"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="TGC"
p:cookiePath="/cas"/>
将p:cookieSecure="true" 修改为false
2、/WEB-INF/spring-configuration/warnCookieGenerator.xml文件中有如下配置:
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas"/>
同样将p:cookieSecure="true" 修改为false
3、在/resources/services/HTTPSandIMAPS-10000001.json中serviceId节点添加 |http, 添加后如下:
{
"@class": "org.jasig.cas.services.RegexRegisteredService",
"serviceId": "^(https|imaps|http)://.*",
"name": "HTTPS and IMAPS and http",
"id": 10000001,
"description": "This service definition authorized all application urls that support HTTPS and IMAPS protocols.",
"proxyPolicy": {
"@class": "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy"
},
"evaluationOrder": 0,
"usernameAttributeProvider": {
"@class": "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider"
},
"logoutType": "BACK_CHANNEL",
"attributeReleasePolicy": {
"@class": "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy",
"principalAttributesRepository": {
"@class": "org.jasig.cas.authentication.principal.DefaultPrincipalAttributesRepository"
},
"authorizedToReleaseCredentialPassword": false,
"authorizedToReleaseProxyGrantingTicket": false
},
"accessStrategy": {
"@class": "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy",
"enabled": true,
"ssoEnabled": true
}
}
重启即可使用http协议了
二、修改登录页面
1、默认的登陆页面是WEB-INF/view/jsp/default里面的ui/casLoginView.jsp为登陆页面,首先copy一份default命名为szcourt。原来的default用于备份。
2、默认的properties文件是cas-theme-default.properties,同样copy一份命名为cas-theme-mytheme.properties,cas4.1 中的的配置只有js及css,所以暂时不做修改
standard.custom.css.file=/css/cas.css
cas.javascript.file=/js/cas.js
3、修改cas.properties中的属性
原有的配置
cas.themeResolver.defaultThemeName=cas-theme-default
cas.viewResolver.defaultViewsPathPrefix=/WEB-INF/view/jsp/default/ui/
修改为
cas.themeResolver.defaultThemeName=cas-theme-mytheme
cas.viewResolver.defaultViewsPathPrefix=/WEB-INF/view/jsp/mytheme/ui/
这两个属性在cas-servlet.xml中的themeResolver中使用(不需要修改)
<!-- Theme Resolver -->
<bean id="themeResolver" class="org.jasig.cas.services.web.ServiceThemeResolver"
p:defaultThemeName="${cas.themeResolver.defaultThemeName}"
p:servicesManager-ref="servicesManager">
<property name="mobileBrowsers">
<util:map>
<entry key=".*iPhone.*" value="iphone"/>
<entry key=".*Android.*" value="iphone"/>
<entry key=".*Safari.*Pre.*" value="iphone"/>
<entry key=".*Nokia.*AppleWebKit.*" value="iphone"/>
</util:map>
</property>
</bean>
这样子就可以任性的修改登陆页面了
三、修改语言
修改默认语言为汉语,打开/WEB-INF/cas-servlet.xml
<!-- Locale Resolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" p:defaultLocale="zh_CN" />
四、修改CAS注销后跳转指定的url
cas-servlet.xml中修改CAS注销后跳转指定的url(url中的service参数),搜索logoutAction中的p:followServiceRedirects属性改为true
<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction" p:servicesManager-ref="servicesManager" p:followServiceRedirects="${cas.logout.followServiceRedirects}"/>
五、修改使用数据库密码验证登陆
在cas-server-webapp项目的pom.xml文件中添加数据库支持依赖及mysql的驱动包
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp-support</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<!-- jdbc driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
<scope>runtime</scope>
</dependency>
在cas.properties中添加数据库配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/ems?useUnicode\=true&characterEncoding\=utf-8&zeroDateTimeBehavior\=convertToNull
jdbc.username=root
jdbc.password=root
修改\WEB-INF\deployerConfigContext.xml
注释掉authenticationManager中的primaryAuthenticationHandler,并添加dbAuthHandler(楼主因密码加密方式比较特殊就自己copy了一遍然后重新实现验证部分了,后面有贴完整的代码)
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver"/>
<!--原有的handler引用-->
<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
<!--新添加的handler引用-->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
</map>
</constructor-arg>
<property name="authenticationPolicy">
<bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy"/>
</property>
</bean>
<!--原有的handler配置-->
<!--<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>-->
<!--新添加的handler配置-->
<!-- Define the DB Connection -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="${jdbc.driver}"
p:jdbcUrl="${jdbc.url}"
p:user="${jdbc.username}"
p:password="${jdbc.password}"/>
<bean id="myPasswordEncoder" class="org.jasig.cas.MyPasswordEncoder"
c:encodingAlgorithm="SHA-1"
p:characterEncoding="UTF-8"/>
<bean id="dbAuthHandler" class="org.jasig.cas.QueryDatabaseBAuthHandler"
p:dataSource-ref="dataSource"
p:sql="select password from sys_user where login_name=? and del_flag=0"
p:passwordEncoder-ref="myPasswordEncoder"/>
六、修改使用mysql登陆时比较容易犯的错误:
因为密码加密方式与系统的不同,所以重新写了个PasswordEncoder与handler,中间修改所有配置及PasswordEncoder均没有效果,原因是在web包的pom文件中添加了core包和jdbc包的依赖,导致web项目不再使用导入的项目。
其中MyPasswordEncoder需要实现PasswordEncoder接口, QueryDatabaseBAuthHandler需要继承AbstractJdbcUsernamePasswordAuthenticationHandler类。 这样就可以根据自己的需求来实现密码加密方式。
另外,需要注意的是,服务端的数据库与客户端不一致,用户表要一一对应。因为不同步问题导致访问时一直重定向次数过多,困扰了我整整一天,找了各种教程都没解决。然后,第二天发现服务端登陆的用户在客户端的用户表中不存在,又因为我配置的登陆失败页面就是CAS登陆页,而第一次登陆就拿到了Ticket,一到登录页CAS直接告诉客户端登陆成功,客户端又却获取不到正确的用户导致登陆失败,如此陷入了一个死循环中。
这个问题一方面可以通过同步用户表来解决,一方面也可以修改登录失败的跳转页面。
七、完整的代码
1、cas-server父项目
pom.xml(注释掉了一部分maven检查的插件,maven install等一直failure,没找着解决办法,所以注释掉了)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.jasig.parent</groupId>
<artifactId>jasig-parent</artifactId>
<version>40</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server</artifactId>
<packaging>pom</packaging>
<name>Apereo Central Authentication Service</name>
<description>Apereo CAS SSO server libraries and Web application.</description>
<version>4.1.0</version>
<url>http://www.jasig.org/cas/</url>
<inceptionYear>2004</inceptionYear>
<issueManagement>
<system>Jira</system>
<url>https://issues.jasig.org/browse/CAS</url>
</issueManagement>
<!-- SVN上对应的资源地址-->
<!--<scm>
<connection>scm:git:git@github.com:Jasig/cas.git</connection>
<developerConnection>scm:git:git@github.com:Jasig/cas.git</developerConnection>
<url>https://github.com/Jasig/cas</url>
<tag>v4.1.0</tag>
</scm>-->
<!-- 用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置 -->
<distributionManagement>
<!-- 配置到文件系统 -->
<site>
<id>cas-site</id>
<name>CAS Staging Site Documentation</name>
<url>file:${project.site.deployDirectory}</url>
</site>
</distributionManagement>
<build>
<testResources>
<testResource>
<directory>${basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${maven-jetty-plugin.version}</version>
<configuration>
<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>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<forkMode>once</forkMode>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
<additionalClasspathElements>
<additionalClasspathElement>${project.build.directory}/test-lib/jdbc-driver.jar
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/unwoven-classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}</directory>
<includes>
<include>none</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${maven-findbugs-plugin.version}</version>
<configuration>
<plugins>
<plugin>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
<version>${maven-findbugs-contrib-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.h3xstream.findsecbugs</groupId>
<artifactId>findsecbugs-plugin</artifactId>
<version>${maven-findbugs-security-plugin.version}</version>
</plugin>
</plugins>
<includeFilterFile>${cs.dir}/findbugs-rules.xml</includeFilterFile>
<effort>Max</effort>
<failOnError>true</failOnError>
</configuration>
<executions>
<execution>
<id>findbugs-check</id>
<phase>compile</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>-->
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<configuration>
<consoleOutput>true</consoleOutput>
<configLocation>${cs.dir}/checkstyle-rules.xml</configLocation>
<suppressionsLocation>${cs.dir}/checkstyle-suppressions.xml</suppressionsLocation>
<failsOnError>true</failsOnError>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<executions>
<execution>
<id>checkstyle</id>
<goals>
<goal>checkstyle</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>${checkstyle.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
<executions>
<execution>
<id>enforce</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>2.0.9</version>
</requireMavenVersion>
<requireJavaVersion>
<version>${project.build.sourceVersion}</version>
</requireJavaVersion>
<bannedDependencies>
<excludes>
<exclude>cglib:cglib</exclude>
<exclude>cglib:cglib-full</exclude>
</excludes>
<includes>
<include>cglib:cglib:provided</include>
<include>cglib:cglib-full:provided</include>
</includes>
<searchTransitive>true</searchTransitive>
</bannedDependencies>
</rules>
</configuration>
</execution>
</executions>
</plugin>-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${project.build.sourceVersion}</source>
<target>${project.build.targetVersion}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>${maven-buildnumber-plugin-version}</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<timestampFormat>yyyy-MM-dd HH:mm:ssa</timestampFormat>
<timestampPropertyName>timestamp</timestampPropertyName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Date>${timestamp}</Implementation-Date>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<configuration>
<classifier>client</classifier>
<excludes>
<exclude>**/persistence.xml</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}</version>
<configuration>
<descriptors>
<descriptor>${basedir}/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>${maven-aspectj-plugin.version}</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<sources/>
<complianceLevel>${project.build.sourceVersion}</complianceLevel>
<forceAjcCompile>true</forceAjcCompile>
<aspectLibraries>
<aspectLibrary>
<groupId>org.jasig.inspektr</groupId>
<artifactId>inspektr-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<weaveDirectories>
<weaveDirectory>${project.build.directory}/classes</weaveDirectory>
</weaveDirectories>
<skip>${maven.compiler.aspectj.skip}</skip>
<showWeaveInfo/>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<tagNameFormat>v@{project.version}</tagNameFormat>
<arguments>-Psonatype-oss-release,jasig-release,nocheck</arguments>
</configuration>
</plugin>
<!-- CAS-988 generate hashes for assembly artifacts -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-antrun-plugin.version}</version>
<configuration>
<target>
<ant antfile="tasks.xml" target="genhash"/>
</target>
</configuration>
</plugin>
<!--<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<configuration>
<header>${cs.dir}/src/licensing/header.txt</header>
<skipExistingHeaders>true</skipExistingHeaders>
<strictCheck>true</strictCheck>
<headerDefinitions>
<headerDefinition>${cs.dir}/src/licensing/header-definitions.xml</headerDefinition>
</headerDefinitions>
<aggregate>true</aggregate>
<mapping>
<schema>SCRIPT_STYLE</schema>]
<ldif>SCRIPT_STYLE</ldif>
<yml>SCRIPT_STYLE</yml>
<conf>JAVADOC_STYLE</conf>
<less>JAVADOC_STYLE</less>
</mapping>
<excludes>
<exclude>**/bin/**</exclude>
<exclude>LICENSE</exclude>
<exclude>**/INSTALL*</exclude>
<exclude>**/NOTICE*</exclude>
<exclude>**/README*</exclude>
<exclude>**/readme*</exclude>
<exclude>**/*.log</exclude>
<exclude>**/*.license</exclude>
<exclude>**/*.txt</exclude>
<exclude>**/*.crt</exclude>
<exclude>**/*.cer</exclude>
<exclude>**/*.jks</exclude>
<exclude>**/*.crl</exclude>
<exclude>**/*.key</exclude>
<exclude>**/*.json</exclude>
<exclude>**/*.checkstyle</exclude>
<exclude>**/*.properties</exclude>
<exclude>**/.gitignore</exclude>
<exclude>**/overlays/**</exclude>
<exclude>src/licensing/**</exclude>
<exclude>**/testCA/**</exclude>
<exclude>**/.idea/**</exclude>
<exclude>**/*.keystore</exclude>
<exclude>**/*.example</exclude>
<exclude>**/*.jmx</exclude>
<exclude>**/*.pandoc</exclude>
<exclude>**/*.sample</exclude>
<exclude>**/*.doc</exclude>
<exclude>**/*.md</exclude>
<exclude>**/*.pdf</exclude>
<exclude>**/*.pem</exclude>
<exclude>**/*.p8</exclude>
<exclude>**/*.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>-->
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>${javax.el-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>${javax.el-impl.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jasig.inspektr</groupId>
<artifactId>inspektr-aspects</artifactId>
<version>${inspektr.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jdbc driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<pluginRepositories>
<pluginRepository>
<id>mojo-snapshot</id>
<name>Codehause Mojo Snapshot Repository</name>
<url>https://nexus.codehaus.org/content/repositories/codehaus-snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.bitbucket.b_c</groupId>
<artifactId>jose4j</artifactId>
<version>${jose.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons.collections.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>${dbcp.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.ldaptive</groupId>
<artifactId>ldaptive</artifactId>
<version>${ldaptive.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
<version>${woodstox.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.databind.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${metrics.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-annotation</artifactId>
<version>${metrics.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-jvm</artifactId>
<version>${metrics.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-servlets</artifactId>
<version>${metrics.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.ryantenney.metrics</groupId>
<artifactId>metrics-spring</artifactId>
<version>${metrics.spring.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${google.guava.version}</version>
</dependency>
<dependency> <groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>${xml.apis.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons.lang.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${apache.httpclient.version}</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>${cas.client.version}</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Inspektr Dependencies -->
<dependency>
<groupId>org.jasig.inspektr</groupId>
<artifactId>inspektr-audit</artifactId>
<version>${inspektr.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<artifactId>validation-api</artifactId>
<groupId>javax.validation</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jasig.inspektr</groupId>
<artifactId>inspektr-common</artifactId>
<version>${inspektr.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<artifactId>validation-api</artifactId>
<groupId>javax.validation</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jasig.inspektr</groupId>
<artifactId>inspektr-support-spring</artifactId>
<version>${inspektr.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<artifactId>validation-api</artifactId>
<groupId>javax.validation</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-jexl</groupId>
<artifactId>commons-jexl</artifactId>
<version>1.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jasig.service.persondir</groupId>
<artifactId>person-directory-impl</artifactId>
<version>${person.directory.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons.codec.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.core.version}</version>
<type>jar</type>
<exclusions>
<exclusion>
<artifactId>jboss-logging-annotations</artifactId>
<groupId>org.jboss.logging</groupId>
</exclusion>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.core.version}</version>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>${hibernate.core.version}</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.hibernate.java-persistence</groupId>
<artifactId>jpa-api</artifactId>
<version>${jpa.version}</version>
<scope>compile</scope>
</dependency>
<!-- Spring Security Managed Dependencies -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>${jersey.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring Security Dependencies -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring Managed Dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>${spring.webflow.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jasig</groupId>
<artifactId>spring-webflow-client-repo</artifactId>
<version>${spring.webflow.client.repo.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<artifactId>jboss-logging</artifactId>
<groupId>org.jboss.logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${hsqldb.version}</version>
</dependency>
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<version>${uboundid.ldapsdk.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
<type>jar</type>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${apache.shiro.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>${reflections.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-security-filter</artifactId>
<version>${cas-server-security-filter.version}</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>${jcache.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jsr107.ri</groupId>
<artifactId>cache-ri-impl</artifactId>
<version>${jcache.ri.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>${hazelcast.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>5.0.6</version>
</dependency>-->
</dependencies>
</dependencyManagement>
<modules>
<module>cas-server-webapp</module>
</modules>
<reporting>
<plugins>
<plugin>
<!-- Excluding test javadpcs from the report set until this bug is fixed:
see https://jira.codehaus.org/browse/MJAVADOC-418 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<reportSets>
<reportSet>
<id>default</id>
<reports>
<report>javadoc</report>
</reports>
</reportSet>
<reportSet>
<id>aggregate</id>
<reports>
<report>aggregate</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven-projectinfo-reports-plugin.version}</version>
<reportSets>
<reportSet>
<reports>
<report>index</report>
<report>project-team</report>
<report>mailing-list</report>
<report>issue-tracking</report>
<report>license</report>
<report>scm</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>${maven-jxr-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven-pmd-plugin.version}</version>
<configuration>
<targetJdk>${project.build.targetVersion}</targetJdk>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${maven-versions-plugin.version}</version>
<reportSets>
<reportSet>
<reports>
<report>dependency-updates-report</report>
<report>plugin-updates-report</report>
<report>property-updates-report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>taglist-maven-plugin</artifactId>
<version>${maven-taglist-plugin.version}</version>
</plugin>
</plugins>
</reporting>
<profiles>
<profile>
<id>nocheck</id>
<properties>
<skipTests>true</skipTests>
<checkstyle.skip>true</checkstyle.skip>
<license.skip>true</license.skip>
<notice.skip>true</notice.skip>
<versions.skip>true</versions.skip>
<findbugs.skip>true</findbugs.skip>
<cobertura.skip>true</cobertura.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<log4j.configuration>file:noLogs.xml</log4j.configuration>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>ci</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<charset>${project.reporting.outputEncoding}</charset>
<encoding>${project.reporting.outputEncoding}</encoding>
<docencoding>${project.reporting.outputEncoding}</docencoding>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<properties>
<!-- Dependency Versions -->
<spring.webflow.version>2.4.1.RELEASE</spring.webflow.version>
<spring.version>4.1.6.RELEASE</spring.version>
<spring.webflow.client.repo.version>1.0.0</spring.webflow.client.repo.version>
<ldaptive.version>1.0.6</ldaptive.version>
<spring.security.version>4.0.1.RELEASE</spring.security.version>
<aspectj.version>1.8.6</aspectj.version>
<javax.validation.version>1.1.0.Final</javax.validation.version>
<commons.jexl.version>1.1</commons.jexl.version>
<hibernate.validator.version>5.1.3.Final</hibernate.validator.version>
<hibernate.core.version>4.3.10.Final</hibernate.core.version>
<slf4j.version>1.7.12</slf4j.version>
<person.directory.version>1.7.0</person.directory.version>
<servlet.api.version>3.0.1</servlet.api.version>
<jpa.version>2.0-cr-1</jpa.version>
<metrics.version>3.1.2</metrics.version>
<commons.codec.version>1.10</commons.codec.version>
<metrics.spring.version>3.1.0</metrics.spring.version>
<log4j.version>2.3</log4j.version>
<junit.version>4.12</junit.version>
<checkstyle.version>6.7</checkstyle.version>
<commons.lang.version>3.4</commons.lang.version>
<commons.collections.version>4.0</commons.collections.version>
<inspektr.version>1.2.GA</inspektr.version>
<commons.io.version>2.4</commons.io.version>
<mockito.version>1.10.19</mockito.version>
<ehcache.version>2.10.0</ehcache.version>
<hsqldb.version>2.3.2</hsqldb.version>
<apache.httpclient.version>4.4.1</apache.httpclient.version>
<joda-time.version>2.8.1</joda-time.version>
<cas.client.version>3.4.1</cas.client.version>
<quartz.version>2.2.1</quartz.version>
<reflections.version>0.9.10</reflections.version>
<apache.shiro.version>1.2.3</apache.shiro.version>
<jackson.databind.version>2.5.3</jackson.databind.version>
<uboundid.ldapsdk.version>2.3.8</uboundid.ldapsdk.version>
<opensaml.version>3.1.1</opensaml.version>
<xml.apis.version>1.4.01</xml.apis.version>
<jstl.version>1.2</jstl.version>
<openid4java.version>0.9.8</openid4java.version>
<cas-server-security-filter.version>2.0.3</cas-server-security-filter.version>
<google.guava.version>18.0</google.guava.version>
<jcache.version>1.0.0</jcache.version>
<jcache.ri.version>1.0.0</jcache.ri.version>
<javax.el-api.version>3.0.0</javax.el-api.version>
<javax.el-impl.version>2.2.6</javax.el-impl.version>
<jersey.version>1.19</jersey.version>
<jose.version>0.4.1</jose.version>
<woodstox.version>4.4.1</woodstox.version>
<pac4j.version>1.7.1</pac4j.version>
<bouncycastle.version>1.51</bouncycastle.version>
<dbcp.version>2.1</dbcp.version>
<hazelcast.version>3.5</hazelcast.version>
<mysql.driver.version>5.1.30</mysql.driver.version>
<!-- Plugin Versions -->
<maven-javadoc-plugin.version>2.10.3</maven-javadoc-plugin.version>
<maven-versions-plugin.version>2.2</maven-versions-plugin.version>
<maven-source-plugin.version>2.4</maven-source-plugin.version>
<maven-pmd-plugin.version>3.4</maven-pmd-plugin.version>
<maven-jxr-plugin.version>2.5</maven-jxr-plugin.version>
<maven-projectinfo-reports-plugin.version>2.8</maven-projectinfo-reports-plugin.version>
<maven-taglist-plugin.version>2.4</maven-taglist-plugin.version>
<maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
<maven-checkstyle-plugin.version>2.15</maven-checkstyle-plugin.version>
<maven-enforcer-plugin.version>1.4</maven-enforcer-plugin.version>
<maven-assembly-plugin.version>2.5.5</maven-assembly-plugin.version>
<maven-aspectj-plugin.version>1.7</maven-aspectj-plugin.version>
<maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
<maven-findbugs-plugin.version>3.0.1</maven-findbugs-plugin.version>
<maven-findbugs-contrib-plugin.version>6.2.1</maven-findbugs-contrib-plugin.version>
<maven-findbugs-security-plugin.version>1.4.1</maven-findbugs-security-plugin.version>
<maven-buildnumber-plugin-version>1.3</maven-buildnumber-plugin-version>
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
<maven-jetty-plugin.version>9.3.0.v20150612</maven-jetty-plugin.version>
<!-- Project configuration -->
<project.build.sourceVersion>1.7</project.build.sourceVersion>
<project.build.targetVersion>1.7</project.build.targetVersion>
<maven.compiler.aspectj.skip>false</maven.compiler.aspectj.skip>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ssa</maven.build.timestamp.format>
<cs.dir>${project.basedir}</cs.dir>
<issues.projectKey>CAS</issues.projectKey>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.site.deployDirectory>/tmp/cas-deploy-site</project.site.deployDirectory>
</properties>
</project>
2、cas-server-webapp项目
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server</artifactId>
<version>4.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cas-server-webapp</artifactId>
<packaging>war</packaging>
<name>Apereo CAS Web Application</name>
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-core</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp-support</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-integration-restlet</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<type>jar</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-security-filter</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.ryantenney.metrics</groupId>
<artifactId>metrics-spring</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-jvm</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-servlets</artifactId>
</dependency>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet.ext.spring</artifactId>
<version>${restlet.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet.ext.servlet</artifactId>
<version>${restlet.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet.ext.slf4j</artifactId>
<version>${restlet.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
<port>80</port>
<contextReloadable>false</contextReloadable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>cas</warName>
<webResources>
<resource>
<directory>${basedir}/src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${maven-jetty-plugin.version}</version>
<configuration>
<webApp>
<contextPath>/cas</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<restlet.version>2.1.0</restlet.version>
<cs.dir>${project.parent.basedir}</cs.dir>
</properties>
</project>
MyPasswordEncoder.java
package org.jasig.cas;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.jasig.cas.authentication.handler.PasswordEncoder;
import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
/**
* @author ouk
* @since 4.1.0
*/
public class MyPasswordEncoder implements PasswordEncoder {
private static final int HASH_INTERATIONS = 1024;
@NotNull
private final String encodingAlgorithm;
private String characterEncoding;
/**
* Instantiates a new default password encoder.
*
* @param encodingAlgorithm the encoding algorithm
*/
public MyPasswordEncoder(final String encodingAlgorithm) {
this.encodingAlgorithm = encodingAlgorithm;
}
/**
* Hex编码.
*/
public String encodeHex(final byte[] input) {
return new String(Hex.encodeHex(input));
}
/**
* Hex解码.
*/
public byte[] decodeHex(final String input) throws DecoderException {
return Hex.decodeHex(input.toCharArray());
}
/**
* 对字符串进行散列, 支持md5与sha1算法.
*/
private byte[] digest(final byte[] input, final String algorithm, final byte[] salt, final int iterations) throws GeneralSecurityException {
final MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
}
@Override
public String encode(final String comixPassword) {
try {
final String[] strArr = comixPassword.split(",");
byte[] salt = decodeHex(strArr[1].substring(0, 16));
byte[] hashPassword = digest(strArr[0].getBytes(this.characterEncoding), this.encodingAlgorithm, salt, HASH_INTERATIONS);
return encodeHex(salt) + encodeHex(hashPassword);
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
} catch (DecoderException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void setCharacterEncoding(final String characterEncoding) {
this.characterEncoding = characterEncoding;
}
}
QueryDatabaseBAuthHandler.java
package org.jasig.cas;
import org.jasig.cas.adaptors.jdbc.AbstractJdbcUsernamePasswordAuthenticationHandler;
import org.jasig.cas.authentication.HandlerResult;
import org.jasig.cas.authentication.PreventedException;
import org.jasig.cas.authentication.UsernamePasswordCredential;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import javax.security.auth.login.AccountNotFoundException;
import javax.security.auth.login.FailedLoginException;
import javax.validation.constraints.NotNull;
import java.security.GeneralSecurityException;
import java.util.List;
/**
* @author ouk
*/
public class QueryDatabaseBAuthHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler {
@NotNull
private String sql;
@Override
protected final HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential) throws GeneralSecurityException, PreventedException {
String username = credential.getUsername();
String password = credential.getPassword();
try {
String dbPassword = (String) this.getJdbcTemplate().queryForObject(this.sql, String.class, new Object[]{username});
System.out.println("数据库密码:" + dbPassword);
String encryptedPassword = this.getPasswordEncoder().encode(password + "," + dbPassword);
System.out.println("加密后的字符串:" + encryptedPassword);
if (!dbPassword.equals(encryptedPassword)) {
throw new FailedLoginException("Password does not match value on record.");
}
} catch (IncorrectResultSizeDataAccessException var5) {
if (var5.getActualSize() == 0) {
throw new AccountNotFoundException(username + " not found with SQL query");
}
throw new FailedLoginException("Multiple records found for " + username);
} catch (DataAccessException var6) {
throw new PreventedException("SQL exception while executing query for " + username, var6);
}
return this.createHandlerResult(credential, this.principalFactory.createPrincipal(username), (List) null);
}
public void setSql(String sql) {
this.sql = sql;
}
}