cas4服务端搭建的方式在网上的资料全都是部署war到tomcat中,但是使用cas一般都会有一些自定义需求开发,一种方式是overlay方式进行开发,还有一种是看了公司的cas摸索出来的一种,目前对于基于gradle的cas还没有深入研究,这篇文章就是基于cas4.0.3版本进行说明的。
overlay方式
首先创建一个maven项目,然后修改pom.xml文件即可
pom.xml
<?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.***</groupId>
<artifactId>cas-overlay</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<cas.version>4.0.3</cas.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>cas</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>cas</warName>
<overlays>
<overlay>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
</plugins>
</build>
</project>
overlay方式相关的jar都在下载war的时候在lib目录下有的,所有一些源码的话要额外引入一个cas-server-core包,保证可以编译通过
方式二
源码下载地址:https://github.com/apereo/cas
首先下载以下源码(4.0.3分支的),解压后,通过idea导入解压后的cas-4.0.3\cas-server-webapp 这个目录,强调一下是cas-server-webapp这个目录,然后修改pom.xml,把${project.version}换成4.0.3,把${spring.version}换成3.2.6.RELEASE ,把最后的properties去掉,删除项目src下除main以外的目录,tomcat启动即可。
改造后的pom.xml
<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/maven-v4_0_0.xsd">
<parent>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server</artifactId>
<version>4.0.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cas-server-webapp</artifactId>
<packaging>war</packaging>
<name>Jasig CAS Web Application</name>
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp-support</artifactId>
<version>4.0.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>3.2.6.RELEASE</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
<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>
</dependencies>
<build>
<plugins>
<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>
</plugins>
</build>
</project>
自定义校验器需要修改deployerConfigContext.xml中的primaryAuthenticationHandler,可以将原来primaryAuthenticationHandler改成自己实现的校验器,需要继承AbstractUsernamePasswordAuthenticationHandler类,简单自定义校验器demo如下
import org.jasig.cas.authentication.HandlerResult;
import org.jasig.cas.authentication.PreventedException;
import org.jasig.cas.authentication.UsernamePasswordCredential;
import org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler;
import org.jasig.cas.authentication.principal.SimplePrincipal;
import javax.security.auth.login.FailedLoginException;
import java.security.GeneralSecurityException;
import java.util.List;
/**
* Created by Administrator on 2019/1/26.
*/
public class UserPwd extends AbstractUsernamePasswordAuthenticationHandler {
@Override
protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential) throws GeneralSecurityException, PreventedException {
String username = credential.getUsername();
String pwd = credential.getPassword();
if (username.equals("admin") && pwd.equals("123")){
return createHandlerResult(credential,new SimplePrincipal(username), (List)null);
}
throw new FailedLoginException();
}
}
deployerConfigContext.xml中部分如下
<bean id="primaryAuthenticationHandler"
class="UserPwd">
</bean>
<!--<bean id="primaryAuthenticationHandler"-->
<!--class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">-->
<!--<property name="users">-->
<!--<map>-->
<!--<entry key="casuser" value="Mellon"/>-->
<!--</map>-->
<!--</property>-->
<!--</bean>-->
仅供参考,欢迎讨论~
cas5接下来可参考:https://www.jianshu.com/p/c1273d81c4e4