cas-overlay-template实现单点登录步骤

搭建CAS SERVER
这里使用cas-overlay-template搭建cas服务器,overlay可以把多个项目war合并成为一个项目,并且如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。

apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。
Github地址:https://github.com/apereo/cas-overlay-template
导入后的初始结构如下:
在这里插入图片描述
我们构建如下的主项目结构,其实overlays\org.apereo.cas.cas-server-webapp-tomcat-5.2.3\WEB-INF\classes 目录下已经有模板结构,我们在主项目配置定制化信息,就可以覆盖上面的模板文件。
导入
在这里插入图片描述
整个项目是基于spring boot的,所以在application.properties中配置相关信息即可启动。
设置服务端的端口、路径、https秘钥(暂时可不配)相关配置
server.context-path=/cas
server.port=8443

设置jdbc连接配置,这样服务端启动时会从数据库里去进行用户登录认证

##jdbc认证
#Query Database Authentication 数据库查询校验用户名开始
#查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from tbl_user where username=?
#指定上面的sql查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段,1为过期,若过期需要修改密码
cas.authn.jdbc.query[0].fieldExpired=expired
#为不可用字段段,1为不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled
#数据库方言hibernate的知识
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#数据库驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/zheng?useUnicode=true&characterEncoding=UTF-8
#数据库用户名
cas.authn.jdbc.query[0].user=root
#数据库密码
cas.authn.jdbc.query[0].password=root
#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

启动项目,出现登录界面,用数据库里配置的用户登录即可。
在这里插入图片描述
至此,cas server端,也就是单点登录的统一认证中心,搭建好了。

搭建CAS CLIENT
官方提供了一个简单的客户端项目.
Github地址:https://github.com/cas-projects/cas-sample-java-webapp
下载好后 添加tomcat依赖

<plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
               <port>8088</port>
                <path>/</path>
          </configuration>
</plugin>

修改web.xml配置 主要是配置统一认证中心地址和本项目地址

<!--单点登出过滤器-->
<filter>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://localhost:8443/cas</param-value><!--认证中心地址-->
    </init-param>
</filter>

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

<!--cas认证过滤器-->
<filter>
    <filter-name>CAS Authentication Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://localhost:8443/cas/login</param-value><!--认证中心登录地址-->
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8080/</param-value><!--本项目地址-->
    </init-param>
</filter>

<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://localhost:8443/cas</param-value><!--认证中心地址-->
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8080/</param-value><!--本项目地址-->
    </init-param>
    <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>useSession</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>authn_method</param-name>
        <param-value>mfa-duo</param-value>
    </init-param>
</filter>

启动此客户端,访问http://localhost:8080/
因为这时候没登录,会先跳到http://localhost:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2F这个认证中心的登录页

如果出现如下错误,是因为此时对接的是http服务,服务端未开启http的支持
在这里插入图片描述
解决方法:
第一步、修改services\HTTPSandIMAPS-10000001.json文件,增加http支持
在这里插入图片描述
第二步、 在application.properties文件中添加:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

这时重新访问、登录,可以发现认证中心通过后,重定向到了子项目的首页。

在这里插入图片描述
如果在启一个子系统2,只要简单改下web.xml里的项目路径就可以。这时在子系统1登录的情况下,再去访问子系统2,可以发现不同登录,就直接跳到了子系统2的首页。这就是单点登录。

单点登出:https://localhost:8443/cas/logout?service=http://localhost:8080
子系统1想要登出的话,直接掉如上的接口即可,service= 后面跟的就是子系统1的地址
登出成功的话,再去访问子系统2,发现需要重新登录了。说明该用户在子系统2里也已经登出了。

如上,就是搭建cas 客户端的步骤,可以发现现有项目想要集成进CAS,只要配置好web.xml里相关过滤器就好。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值