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

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

apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。
Github地址:https://github.com/apereo/cas-overlay-template
导入后的初始结构如下:
cas-overlay-template实现单点登录步骤_第1张图片
我们构建如下的主项目结构,其实overlays\org.apereo.cas.cas-server-webapp-tomcat-5.2.3\WEB-INF\classes 目录下已经有模板结构,我们在主项目配置定制化信息,就可以覆盖上面的模板文件。
导入
cas-overlay-template实现单点登录步骤_第2张图片
整个项目是基于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-overlay-template实现单点登录步骤_第3张图片
至此,cas server端,也就是单点登录的统一认证中心,搭建好了。

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


          org.apache.tomcat.maven
          tomcat7-maven-plugin
          2.2
          
               8088
                /
          

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



    CAS Single Sign Out Filter
    org.jasig.cas.client.session.SingleSignOutFilter
    
        casServerUrlPrefix
        http://localhost:8443/cas
    



    org.jasig.cas.client.session.SingleSignOutHttpSessionListener




    CAS Authentication Filter
    
    org.jasig.cas.client.authentication.AuthenticationFilter
    
        casServerLoginUrl
        http://localhost:8443/cas/login
    
    
        serverName
        http://localhost:8080/
    



    CAS Validation Filter
    
    org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
    
        casServerUrlPrefix
        http://localhost:8443/cas
    
    
        serverName
        http://localhost:8080/
    
    
        redirectAfterValidation
        true
    
    
        useSession
        true
    
    
        authn_method
        mfa-duo
    

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

如果出现如下错误,是因为此时对接的是http服务,服务端未开启http的支持
cas-overlay-template实现单点登录步骤_第4张图片
解决方法:
第一步、修改services\HTTPSandIMAPS-10000001.json文件,增加http支持
cas-overlay-template实现单点登录步骤_第5张图片
第二步、 在application.properties文件中添加:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

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

cas-overlay-template实现单点登录步骤_第6张图片
如果在启一个子系统2,只要简单改下web.xml里的项目路径就可以。这时在子系统1登录的情况下,再去访问子系统2,可以发现不同登录,就直接跳到了子系统2的首页。这就是单点登录。

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

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

你可能感兴趣的:(Java实例)