欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手把手教Apereo CAS5.2.3服务端Server的开发环境

程序员文章站 2022-05-05 11:43:32
...

hugeo的CAS系列:https://blog.csdn.net/u010588262/article/category/7548325
DEMO下载:https://download.csdn.net/download/u010588262/10327539

搞了有三天,搭建环境真不容易,坑很多,官网英文文档看着费劲也不详细,网上教程也不详细,只能自己摸索了,现在到了造福大众的时候了

下载

在这里把zip文件下载下来:(我下载的时候版本是5.2.3)
https://github.com/apereo/cas-overlay-template

编译

解压zip,命令行进去,执行mvn clean package
结束之后会出现 target 文件夹,里面有war包啥的,把war包解压,比如我们把解压后的文件夹命名为 cas_war 吧,后文提到 cas_war 就代表是这个文件夹

本地配置tomcat通过https访问

注意以下所有命令除了文件路径最好都跟我的保持一致,比如alias,就用tomcat不要换别的,省的小白出问题
命令行里cd进入%JAVA_HOME%/bin目录,配置了环境变量就不用了

1.执行:

keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "E:\projects\hugeo\cas\tomcat.keystore"
按照以下输入:

**库口令:123456(这个密码非常重要)
名字与姓氏:www.hugeo.com(域名很重要,建议自己编个域名,在host文件里写好映射,host的使用百度吧)
组织单位名称:anything(随便填)
组织名称:anything(随便填)
城市:anything(随便填)
省市自治区:anything(随便填)
国家地区代码:anything(随便填)

现在E:\projects\hugeo\cas\tomcat.keystore这个文件生成了

2.继续执行:

keytool -export -file E:\projects\hugeo\cas\cas.crt -keystore E:\projects\hugeo\cas\tomcat.keystore -alias tomcat
用刚刚的tomcat.keystore文件生成了cas.crt文件

3.导入授权文件到jdk并设置密码:

keytool -import -file E:\projects\hugeo\cas\cas.crt -alias tomcat -keystore E:\programFiles\Java\jre1.8.0_131\lib\security\cacerts -storepass 123456
注意-storepass 123456是设置此步骤的密码的,第一次执行命令设置之后以后再执行这个命令就不要带这个参数了,然后输入密码的时候输第一次设置的密码,这个密码和生成keystore的密码可以不一样,设置成一样的比较方便防止搞混

要删除也很容易:
keytool -delete -alias tomcat -keystore E:\programFiles\Java\jre1.8.0_131\lib\security\cacerts

(如果导入的时候没有设置别名就再导入一次,会显示别名)

5.修改tomcat的配置文件server.xml

删掉:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

添加:

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="E:\projects\learn\cas\tomcat.keystore" keystorePass="123456"
           clientAuth="false" sslProtocol="TLS"/>

6.把crt文件导入浏览器,我用的是chrome

手把手教Apereo CAS5.2.3服务端Server的开发环境
手把手教Apereo CAS5.2.3服务端Server的开发环境
把第二步生成的crt文件导进去进行了

7. 检查配置

cas_war 放到tomcat的webapp下面改名为cas,启动tomcat,浏览器访问https://www.hugeo.com:8443/cas/login,如果提示签名不正确之类的就点击高级/详细信息,继续访问。

8.注意

大部分情况下本地开发是不需要ssl访问的,所以建议给cas单独弄个tomcat,反正一个tomcat也就十几兆,我本地开发其他项目时用tomcat8,cas使用的是tomcat9,版本其实也没太大关系,好像是高于tomcat8的版本就可以了

建项目

用idea新建一个spring boot项目,什么插件都不需要
pom.xml是从第一步下载的zip里的pom文件改造的,最好大概看一下理解一下,需要修改的地方自己改:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hugeo</groupId>
    <artifactId>cas</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>cas</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <cas.version>5.2.3</cas.version>
        <app.server>-tomcat</app.server>

        <mainClassName>org.springframework.boot.loader.WarLauncher</mainClassName>
        <isExecutable>false</isExecutable>
        <manifestFileToUse>
            ${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF
        </manifestFileToUse>

        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <springboot.version>2.0.0.RELEASE</springboot.version>
    </properties>

    <repositories>
        <repository>
            <id>sonatype-releases</id>
            <url>http://oss.sonatype.org/content/repositories/releases/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
        <repository>
            <id>sonatype-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
        <repository>
            <id>shibboleth-releases</id>
            <url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${springboot.version}</version>
                <configuration>
                    <mainClass>${mainClassName}</mainClass>
                    <addResources>true</addResources>
                    <executable>${isExecutable}</executable>
                    <layout>WAR</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warName>cas</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <recompressZippedFiles>false</recompressZippedFiles>
                    <archive>
                        <compress>false</compress>
                        <manifestFile>${manifestFileToUse}</manifestFile>
                    </archive>
                    <overlays>
                        <overlay>
                            <groupId>org.apereo.cas</groupId>
                            <artifactId>cas-server-webapp${app.server}</artifactId>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
            </plugin>
        </plugins>
        <finalName>cas</finalName>
    </build>

    <dependencies>
        <!-- 和maven-war-plugin里配置的overlays配合使用 -->
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-webapp${app.server}</artifactId>
            <version>${cas.version}</version>
            <type>war</type>
            <scope>runtime</scope>
        </dependency>
        <!-- 自己需要的jar包,我这里用到了查库验证身份,所以引入了mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
    </dependencies>

</project>

搞了很久的还有一个原因是以前没有接触过maven的overlay用法,这个功能就是引入一个war包(不知道jar包可不可以,没试),然后打包的时候,框架会在这个war包的基础上把自己写的类啊,配置文件啊什么加进去,如果原来已经有了就覆盖,了解这个之后就觉得这个用法挺好的,保持了项目的简洁性,实现无侵入性改造。
我理解的这两个地方是配合使用的:
手把手教Apereo CAS5.2.3服务端Server的开发环境

dependency的war包用于覆盖,overlay用于配置哪些文件不打包到最终war包里,类似这种用法:
手把手教Apereo CAS5.2.3服务端Server的开发环境
不过我也没试过,猜测的

这样虽然可以打包了,但是依赖的war包里的类并不能编译,想写一个类继承war包里的一个类搞不定,引用不到,scope改成compile也是一样,有博客提到用下面这种糟糕的方式:

  <dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-webapp${app.server}</artifactId>  
    <version>${cas.version}</version>  
    <type>jar</type>
    <classifier>classes</classifier>
    <scope>provided</scope>
  </dependency>

相当于是把war包里需要的jar都下载下来的意思,下载了半年都没下好,很浪费时间空间,因为需要的jar包在咱们的 css_war/WEB_INF/lib 下面都有了啊,所以就不搞这些虚的了,直接在 Project Structure->Modules->Dependencies把 css_war/WEB_INF/lib 引入进来,scope选provided。

webapp目录需要自己创建,如果不用在里面加什么自定义文件的话不创建也可以
目前为止项目结构:
手把手教Apereo CAS5.2.3服务端Server的开发环境

application.properties和META-INF文件夹从 css_war 里面拷贝出来,后面自己定制化会涉及到修改这两个文件

配置调试注意:
1. tomcat选择配置了ssl的那个
2. url自己写一下,跟下面的https端口一样
3. jdk至少1.8
4. http port不要填,否则启动会报错
5. contextpath配置一下
手把手教Apereo CAS5.2.3服务端Server的开发环境
手把手教Apereo CAS5.2.3服务端Server的开发环境
第一次启动应该会出现:
手把手教Apereo CAS5.2.3服务端Server的开发环境
选accept就行了

大功告成了
手把手教Apereo CAS5.2.3服务端Server的开发环境

目前为止项目应该可以启动了,后续会继续写:
1. 怎么从数据库验证用户名和密码,默认的用户名和密码是写死在application.properties最后一行的cas.authn.accept.users=casuser::Mellon,也就是用户名casuser,密码Mellon。
2. 客户端的配置
3. 服务端开启restful验证