CAS 服务端部署 部分配置


使用的版本是 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值