Liferay开源门户系统之cas单点登录功能集成方法

目录

Liferay开源门户系统之cas单点登录功能集成方法

一、概述

二、cas服务端配置

步骤1:准备好以下运行环境

步骤2:安装部署cas-server

步骤3:生成数字证书

步骤4:配制tomcat支持https协议

步骤5:测试

三、liferay支持cas的配置方法

四、其它web应用支持cas的配置方法

一、概述

       liferayjava中的一个开源门户系统,它实现了jsr268规范,基于java标准的portlet组件开发而成,是java界最流行的开源门户系统。

       liferay已经提供了单点登录、权限控制、用户管理、页面布局等功能的支持,我们只需要做相应的定制,即可实现我们的需求。

       liferay支持cas单点登录功能比较简单,只需要进入liferay的后台管理页面,填写cas服务端信息即可,难点就在cas服务端的部署与配置。因为cas服务端也是一个独立的web应用,且它与cas客户端的通信都是使用https协议,这就要求cas服务端需要提供一个非对称加密的数字证书,私钥导入到服务端的jre证书库,公钥导入到客户端的jre证书库中,这样才能安全的实现的单点登录功能。

       获取数字证书有两种方式:一种是手动生成;一种是付费购买。

       手动生成的数字证书是免费的,没有公信力,会被浏览器拦截并不推荐使用。

       付费购买的数字证书具有公信力,浏览器不会拦截,但要收费。

       为了便于测试,我将使用java提供的keytool生成数字证书。

二、cas服务端配置

步骤1:准备好运行环境

步骤2:安装部署cas-server

步骤3:生成数字证书

步骤4:配制tomcat支持https协议

步骤5:测试

步骤1:准备好以下运行环境

jdk1.6+

tomcat6+

jdktomcat的下载、安装、配置在此略过。

步骤2:安装部署cas-server

       到官网(http://downloads.jasig.org/cas/cas-server-3.5.0-release.zip)下载cas-server-3.5.0-release.zip解压缩以后,在其路径 cas-server-3.5.0\modules 下面找到 cas-server-webapp-3.5.0.war 将其拷贝到 tomcat webapps 下, 改名为 cas.war, 并修改 war 包中配置文件 cas.properties 里的 cas server name=cas 并启动 tomcat 启动后可在浏览器访问 http://localhost:8080/cas/login

当出现如下界面时,说明 cas 服务器已经初步部署成功。
CAS 服务器登录界面

       此时,还不能作为有效的单点登录服务器。在实际使用的时候,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication) 接口和 cas-server的界面(这部分内容以后再详述)。其中红色部分提示当前登录的 cas 链接是不安全的,建议使用 https 协议。 

步骤3:生成数字证书

打开cmd,进入jdkbin目录,执行以下命令

生成证书

keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 888888 -validity 365 -keystore e:\ssodemo.keystore -storepass 888888

注意:keypassstorepass密码要一致。

执行命令后,会让你填写一些基本信息,根据提示填写就行了,唯独“名称”一定要填写你的web访问域名,例如:localhostbaidu.com,否则使用会出错。

 

导出证书(证书导出后要给服务端与客户端使用)

keytool -export -alias ssodemo -keystore e:\ssodemo.keystore -file e:\ssodemo.crt -storepass 888888

 

导入证书(将证书导入到cas服务端使用的jre证书库,稍后cas客户端也要做此操作)

keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file e:\ssodemo.crt -alias ssodemo

注意:jdk的证书库路径在安装目录下的\jre\lib\security\cacerts

       cas做为一个统一的单点登录平台,分为服务端和客户端。服务端就是刚刚部署好的cas-server,客户端则是一个jar包:cas-client-core-3.2.1.jar,此jar包封装了与cas服务端通信的全部过程。因此,要想让你的web应用接入cas统一登录平台,需要将cas-client-core-3.2.1.jar引入你的web应用,并做相应配置。liferay已经引入此jar包,无需我们手工再引入。通常我们将要接入cas单点登录的web应用,直称为“cas客户端”,因为相对于cas服务端来说,接入的都是客户端。

cas-client-core-3.2.1.jar下载地址:

http://downloads.jasig.org/cas-clients/cas-client-3.2.1-release.zip

步骤4:配制tomcat支持https协议

打开tomcatserver.xml,加入以下配置,开启https协议:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               keystoreFile="e:/ssodemo.keystore" keystorePass="888888"

               clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"/>

参数说明:

keystoreFile 就是步骤3中创建证书的路径

keystorePass 就是步骤3中创建证书的密码

步骤5:测试

重启tomcat,访问https://localhost:8443/cas/login,出现如下页面则代表配置正确。

       此处由于使用手动生成的数字证书,不具有公信力,被浏览器拦截,我们忽略它,点击“继续浏览此网站(不推荐)”,就可以正常使用了。正式使用时,推荐购买一个付费的证书,则不会出现此画面。

点击“继续浏览此网站(不推荐)”出现如下登录界面:

       cas-server的默认验证规则:只要用户名和密码相同就认证通过(仅仅用于测试,生成环境需要根据实际情况修改),输入admin/admin 点击登录,就可以看到登录成功的页面:

看到上述页面表示CAS服务端已经完全部署成功。

三、liferay支持cas的配置方法

liferay支持cas的配置方法相当简单,先将之前生成的证书ssodemo.crt导入到liferay使用的jre证书库中,导入方法与前述类似。然后启动liferay,进入控制面板->portal设置->认证->一般,用户如何认证,选择“按屏幕名称”。

选择cas,进行如下设置:

设置完毕后,点击“测试CAS配置”,出现如下图,则代表配置成功。

好啦!现在注销liferay用户,重新点登录,此时liferay跳到cas的统一登录平台,输入admin/admin,登录成功后,又跳回了liferay首页。

四、其它web应用支持cas的配置方法

       其它web应用支持cas的配置方法,就更加简单了。还是先将之前生成的证书ssodemo.crt导入到web应用使用的jre证书库中,导入方法与前述类似。再将cas-client-core-3.2.1.jar引入到web应用中,并在web.xml中加入以下配置即可。

<!-- ======================== 单点登录开始 ======================== -->

<!-- 用於单点退出,该过滤器用于实现单点登出功能,可选配置-->

<listener>

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

</listener>

<!-- 该过滤器用于实现单点登出功能,可选配置。 -->

<filter>

         <filter-name>CAS Single Sign Out Filter</filter-name>

         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

</filter>

<filter-mapping>

         <filter-name>CAS Single Sign Out Filter</filter-name>

         <url-pattern>/*</url-pattern>

</filter-mapping>

<filter>

         <filter-name>CAS Filter</filter-name>

         <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

         <init-param>

                   <param-name>casServerLoginUrl</param-name>

                   <param-value>https://localhost:8443/cas/login</param-value>

         </init-param>

         <init-param>

                   <param-name>serverName</param-name>

                   <param-value>http://localhost:18080</param-value>

         </init-param>

</filter>

<filter-mapping>

         <filter-name>CAS Filter</filter-name>

         <url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->

<filter>

         <filter-name>CAS Validation Filter</filter-name>

         <filter-class>

                   org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

         </filter-class>

         <init-param>

                   <param-name>casServerUrlPrefix</param-name>

                   <param-value>https://localhost:8443/cas</param-value>

         </init-param>

         <init-param>

                   <param-name>serverName</param-name>

                   <param-value> http://localhost:18080</param-value>

         </init-param>

</filter>

<filter-mapping>

         <filter-name>CAS Validation Filter</filter-name>

         <url-pattern>/*</url-pattern>

</filter-mapping>

<!--

         该过滤器负责实现HttpServletRequest请求的包裹,

         比如允许开发者通过HttpServletRequestgetRemoteUser()方法获得SSO登录用户的登录名,可选配置。

-->

<filter>

         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

         <filter-class>

                   org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>

         </filter>

         <filter-mapping>

                  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

                  <url-pattern>/*</url-pattern>

         </filter-mapping>

</filter>

<!--

该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。

比如AssertionHolder.getAssertion().getPrincipal().getName()

-->

<filter>

         <filter-name>CAS Assertion Thread Local Filter</filter-name>

         <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

</filter>

<filter-mapping>

         <filter-name>CAS Assertion Thread Local Filter</filter-name>

         <url-pattern>/*</url-pattern>

</filter-mapping>

<!-- ======================== 单点登录结束 ======================== -->

参数:serverName是本web应用的访问域名


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章