CAS SERVER 需要linux 连外网网吗

3636人阅读
有了前面的基础,现在可以开始cas server端的部署了。
首先大家可以去上下载cas的最新server端和client端
这里我们下载的是cas-server-3.4.2-release.zip和cas-client-3.1.1-release.zip
下载完成后是一个压缩包,解压后一堆文档,不过里面只有最核心的cas jar包
需要的jar包是用maven管理的,需要安装maven后再从maven.apache.org下载,
maven的使用倒也简单,不过我觉得很别扭,
下载下来了还得把项目重新构建下使其符合myeclipse web project的结构,杯具啊。。。
闲话少说,解压完成后的目录结构为:
我们需要的是cas-server-core/src/main/java目录下的所有java源程序,
部署在/src目录下。
以及cas-server-webapp/src/main/webapp下的所有东西,
部署在/WebRoot目录下。
注意cas-server-webapp/src/main/webapp/WEB-INF/classes目录下的文件应该放到web工程的src目录下
完成以后将所有的jar包下载完成,直接部署至tomcat运行,
启动会输出大量的控制台及log信息,
注意有无异常。一般来说是没有啥异常信息,如果有异常信息,
自行解决:)
需要注意的是applicationContext.xml最后一行
&!-- The scheduler bean wires up any triggers that define scheduled tasks --&&&& &!--bean id="scheduler" class="org.jasig.cas.util.AutowiringSchedulerFactoryBean"/--&
这个我已经注释掉了
cas源程序中竟然没有这个java类,不知何意。。。
启动以后发现没有
或者给我留言,呵呵。
启动后浏览器地址栏输入
这个时候会弹出个安全证书提示的对话框(火狐的话直接就说这个地址有问题,不用关心,加入信任网站列表)
如果没有啥提示或者页面无法访问,请看我的另外一篇文章
如何设置ssl.
然后会出现cas的默认登陆页面:
OK,cas server端设置成功!
默认的登陆验证逻辑是用户名和密码相同,
let's gogogo!
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:85716次
积分:1465
积分:1465
排名:第12180名
原创:52篇
评论:74条
(1)(4)(1)(1)(2)(2)(1)(1)(3)(6)(7)(12)(7)(4)(2)(4)(1)配置Yale CAS Server使用JDBC进行用户验证 - EternalSnow - ITeye技术网站
博客分类:
1.首先导入cas-server-support-jdbc.jar和commons-dbcp.jar包,当然还有少不了的JDBC驱动jar包。
也可以自己从maven中编译cas-server-support-jdbc.jar
2.修改WEB-INF/deployerConfigContext.xml文件,加入JDBC验证。
2.1找到authenticationHandlers代码块。
2.2 注释掉 &bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&
这行是用于测试的,账号密码相同则通过。相信我不用多解释了。
2.3 在找到authenticationHandlers代码块结束前加入以下代码:
&bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"&
&property name="tableUsers"&
&value&users&/value&
&/property&
&property name="fieldUser"&
&value&name&/value&
&/property&
&property name="fieldPassword"&
&value&password&/value&
&/property&
&property name="dataSource" ref="dataSource"/&
首先一个简单的概念,账号验证的话参数基本是两个,账号和密码。
tableUsers 代表JDBC验证时的数据库名
fieldUser 代表在tableUsers中账号字段
fieldPassword 代表在fieldPassword的密码字段
很清楚明白了,这些都是明文的。更多复杂的的验证需要自己扩展了,另外property还有个参数sql,可以自己写SQL做查询。具体看看org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler源码就懂了。
3. 当然是配置datasource了
同样在deployerConfigContext.xml内填加以下代码,建议在底部添加,当然不要在&/beans&之下了,不然不生效了。
&!-- Data source definition --&
&bean id="dataSource" class="mons.dbcp.BasicDataSource"&
&property name="driverClassName"&
&value&com.mysql.jdbc.Driver&/value&
&/property&
&property name="url"&
&value&jdbc:mysql://localhost:3306/cas&/value&
&/property&
&property name="username"&
&value&root&/value&
&/property&
&property name="password"&
&value&111111&/value&
&/property&
这些参数相信不用多说明了。
浏览: 192798 次
来自: 广州
如果是maven项目的话1,选择eclipse菜单中的Proj ...
自测本地没问题了谢谢啊
升级hibernate代价太大,采用楼主的方案,拦截器的确起作 ...
亲测有效~~楼主说得很对,解决乱码问题无非是统一编码格式~~
这样登录成功后,再次登录都不要密码了啊,直接就进入到应用里了。 ...CAS单点登录学习笔记二之部署CAS Server - 攻城师 - ITeye技术网站
博客分类:
CAS Server 是一套基于 Java 实现的服务,该服务以一个 Java Web Application 单独部署在与 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。
apache-tomcat-6.0.36
CAS Server版本:cas-server-3.5.2
CAS Client版本:cas-client-3.1.12、cas-client-3.2.1
1.解压cas-server-3.5.2 文件进入最后一个文件夹modules 找到最后一个war包cas-server-webapp-3.5.2.war 2、将cas-server-webapp-3.5.2.war拷贝到apache-tomcat-6.0.36\webapps 下 并修改为 cas.war 启动tomcat服务。
3、浏览器输入
4、输入用户名a密码a(cas 默认配置 输入用户名密码系统即可通过验证)
备注:1、在cas login页面看到Non-secure ConnectionYou are currently accessing CAS over a non-secure connection. Single Sign On WILL NOT WORK. In order to have single sign on work, you MUST log in over HTTPS.
非安全连接您正在访问CAS在非安全连接。单点登录将无法工作。为了有单点登录的工作,你必须通过HTTPS登录。
这是因为我们只迈出了第一步还未配置Tomcat Https加密协议,稍后整理笔记。
2、cas-server-3.5.2.rar、cas-client-3.2.1.rar 源码文件大概81MB 文件过大无法分享,有兴趣的朋友可到官网下载 如果无法下载请留下email或QQ 我会抽空发给大家。
浏览: 79297 次
来自: 上海
第三步中的demosso是之前的密码吗?还是什么啊?我在执行的 ...
讲的太好了
说的很详细
不错,对我作用很大
谢谢了,这个工具类很实用【通知】即日起BSDN问答模块按照国家法律执行先审后发机制,一般在10分钟之内结束审核。
我正在使用BDF,我遇到了一个问题:我用CAS作为SSO的服务器,也按你们的资料说明中配置了cas和taomcat的客户端应用,客户端的web.xml也按资料配置。
客户端应用的地址是:cas的地址是
访问时, 跳转至
,但在输入用户名和密码之后,返回至 后,就出现错误了:
HTTP Status 500 - java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found
type Exception report
message java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found
description The server encountered an internal error (java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found) that prevented it from fulfilling this request.
javax.servlet.ServletException: java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found
com.bstek.bdf.context.ContextPersistenceFilter.doFilter(ContextPersistenceFilter.java:89)
root cause
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:341)
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:305)
org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticateNow(CasAuthenticationProvider.java:131)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticate(CasAuthenticationProvider.java:117)
org.springframework.security.authentication.ProviderManager.doAuthentication(ProviderManager.java:130)
org.springframework.security.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:48)
org.springframework.security.cas.web.CasAuthenticationFilter.attemptAuthentication(CasAuthenticationFilter.java:104)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:57)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
com.bstek.bdf.security.access.intercept.SecurityFilterProxy.doFilter(SecurityFilterProxy.java:70)
com.bstek.bdf.context.ContextPersistenceFilter.doFilter(ContextPersistenceFilter.java:86)
root cause
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching cas.js.local found
com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1764)
com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:958)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:326)
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:305)
org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticateNow(CasAuthenticationProvider.java:131)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticate(CasAuthenticationProvider.java:117)
org.springframework.security.authentication.ProviderManager.doAuthentication(ProviderManager.java:130)
org.springframework.security.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:48)
org.springframework.security.cas.web.CasAuthenticationFilter.attemptAuthentication(CasAuthenticationFilter.java:104)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:57)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
com.bstek.bdf.security.access.intercept.SecurityFilterProxy.doFilter(SecurityFilterProxy.java:70)
com.bstek.bdf.context.ContextPersistenceFilter.doFilter(ContextPersistenceFilter.java:86)
root cause
java.security.cert.CertificateException: No name matching cas.js.local found
sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:210)
sun.security.util.HostnameChecker.match(HostnameChecker.java:77)
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:264)
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185)
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:958)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:326)
org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:305)
org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticateNow(CasAuthenticationProvider.java:131)
org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticate(CasAuthenticationProvider.java:117)
org.springframework.security.authentication.ProviderManager.doAuthentication(ProviderManager.java:130)
org.springframework.security.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:48)
org.springframework.security.cas.web.CasAuthenticationFilter.attemptAuthentication(CasAuthenticationFilter.java:104)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:57)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
com.bstek.bdf.security.access.intercept.SecurityFilterProxy.doFilter(SecurityFilterProxy.java:70)
com.bstek.bdf.context.ContextPersistenceFilter.doFilter(ContextPersistenceFilter.java:86)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.
下面是web.xml和bdf.proprtties的文件,
按你们资料上配置的说明,如下:
bdf.security.casServerLoginUrl=bdf.security.casTicketCheckFilter=bdf.security.casServer=bdf.security.casServerLogoutUrl=
cas是不用https的,但是如果不用https,多如客户端服务器,如何能够SSO成功,也请指教,如果cas不用https多台客户端服务器能够SSO通过,那是最好不过。
Back to top
Back to top保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
单击提交则表示您同意developerWorks
的条款和条件。 .
所有提交的信息确保安全。
developerWorks 社区:
我的概要信息
选择语言:
摘要:Liferay 是一个比较成熟和应用比较广泛的开源的门户平台,提供了很多现成的 portlet 应用,
支持多种方式对应用系统的集成,并且支持对 CAS、LDAP、OpenID、OpenSSO 等认证系统的集成,本文将以 CAS 作为认证中心,
以 Liferay 的用户信息作为认证用户信息,调用 Liferay 中的用户密码加密方法,为 CAS 的认证服务提供密码认证方式。
, QA 工程师, IBM
王嘉瑞 : QA 工程师,目前从事 Analytical Decision Management 软件测试工作。您可以通过 developerWorks 社区与 进行交流。
Liferay 门户介绍Liferay 是一个基于 J2EE 架构的完整的门户解决方案,使用了 EJB、JMS 等技术,
前台界面使用了 Struts MVC 框架、模板技术等一些开源的主流技术,基于 XML 的 portlet 配置文件可以自由地动态扩展,
使用了 Web Services 来支持一些远程信息的获取,使用 Lucene 实现全文检索功能。主要特点:采用最先进的技术 Java, EJB, JMS, SOAP, XML。提供多种单点登陆接口,如 CAS,LDAP, OpenID,OpenSSO 等。管理员能通过用户界面轻松管理用户,组,角色,并为不同的用户分配不同的权限范围和相应的功能。用户可以根据需要定制个性化的页面布局和颜色风格。可以在主流的 J2EE 应用服务器上运行,如 Tomcat,Weblogic,WebSphere 等商业或开源免费的服务器。支持多种主流的数据库,如 Oracle,DB2, MySQL 等。使用了第三方的开源项目,如 Velocity ,Hibernate, Lucene, Struts 等。支持包括中文在内的多种语言。目前最新的版本为 Liferay 6.1(2012 年 2 月更新)。CAS 系统介绍CAS 是一个独立的 web 应用 , 当前使用 Java Servlets 实现,通过 HTTPS 协议保证其数据的传输安全性。
它通过三个 Url 地址进行访问:登录 Url、验证 URL、注销 URL。图 1. CAS 原理和协议Liferay 部署安装本文中,我们以 Liferay6.1 的版本进行部署示例。准备:由于本文需要将 Liferay 的数据库作为单点登录的认证数据库,所以需要将 Liferay 的数据库安装到 Mysql 上。
Mysql 的下载和安装本文不做缀述。在此只简要介绍 Liferay 的安装和配置。Liferay 可以从官方网站下载到安装包的最新版本。Liferay 安装包的下载地址:安装 Liferay:Liferay 在启动时会对数据库进行初始化。将下载到的安装包 liferay-portal-tomcat-6.1.0-ce-ga1-15760.zip 解压到安装目录下,
在路径 liferay-portal-6.1.0-ce-ga1\tomcat-7.0.23\bin 下找到 startup.bat 启动文件,并执行。在默认情况下,
liferay 会使用 Hypersonic 作为默认数据库,在第一次访问时,我们可以对数据库、管理用户等参数进行配置。
当 tomcat 服务器启动后,我们可以访问 http://localhost:8080/ 如果出现基本配置页面,则说明部署成功。
接下来,我们可以在这个配置页面上对 Liferay 进行一些基本设置。首先我们要做的是将默认的数据库更改为我们要使用的 Mysql 数据库。
点击(更改)如图 2:图 2. Liferay 配置页面在此我们将数据库的链接 URL 修改为我们新建的数据库地址。完成后点击完成配置。
此时 Liferay 将根据新的配置参数和数据库地址对数据库进行初始化。当出现如下界面时,则 Liferay 安装完成:图 3. Liferay 配置初始化成功界面CAS 部署安装准备:下载最新版的 CAS 产品包,下载地址:安装 CAS:解压缩以后,在其路径 cas-server-3.5.0\modules 下面找到 cas-server-webapp-3.5.0.war,
将其拷贝到 liferay 的服务器部署目录 liferay-portal-6.1.0-ce-ga1\tomcat-7.0.23\webapps 下,
改名为 cas.war, 并修改 war 包中配置文件 cas.properties 里的 cas server name=cas 并启动 liferay 服务器,
启动后可在浏览器访问 http://localhost:8080/cas/login 当出现如下界面时,说明 cas 服务器已经部署成功。如图 4:图 4. CAS 服务器登录界面此时,CAS 还不能作为有效的单点登录服务器。在实际使用的时候,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication)
接口和 CAS Server 的界面。其中红色部分的提示当前登录的 CAS 链接是不安全的,建议使用 https 协议。
由于 https 协议在服务器上配置已经有很多对应的文档和帮助,在此将不做赘述,本文中,我们将使用 http 协议对 CAS server 进行配置。取消 CAS 服务器 HTTPS 认证方式 :修改 cas\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml 配置文件,将 p:cookieSecure="true”
改为 p:cookieSecure="false" ,改完后如下:清单 1. ticketGrantingTicketCookieGenerator 配置 &bean id="ticketGrantingTicketCookieGenerator"
class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" /&修改 cas\WEB-INF\spring-configuration\warnCookieGenerator.xml 配置文件,将 p:cookieSecure="true”
改为 p:cookieSecure="false" ,改完后如下:清单 2. warnCookieGenerator 配置 &bean id="warnCookieGenerator"
class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" /&修改 deployerConfigContext.xml: 找到"HttpBasedServiceCredentialsAuthenticationHandler" bean 添加:p:requireSecure="false", 改完后如下:清单 3. warnCookieGenerator 配置 &bean class="org.jasig.cas.authentication.handler.support.
HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient"
p:requireSecure="false"/&这样,在 cas 服务器运行的时候,就可以只使用 http 请求了,省去了 HTTPS 协议的麻烦配置。集成方式说明CAS 作为单点登录的认证服务器,在收到页面传递的登录请求以后,将请求转发到 CAS 服务器后端进行验证,在未经配置的时候,
只要输入的密码和用户名称一致,则验证通过。在实际的使用中当然这样是不可行的。在此我们要对用户输入的用户名称和密码做校验。
如果存在该用户,并且密码正确则说明验证通过。这里就有了两个问题:第一,CAS 需要连接到存储用户信息的数据库才能读取到用户信息。
第二,验证密码的加密算法必须和数据库存储密码的加密方式一致。基于此文采用的方式,对于第一个问题,
我们将直接使用 CAS 服务器连接到 Liferay 安装的数据库,直接读取 Liferay 门户的用户信息。
对于第二个问题,我们将直接调用 Liferay 中的加密算法对用户输入的密码进行加密,然后与数据库中的加密密码进行比对。
这样就可以保证 CAS 服务器在进行用户认证时,可以和 Liferay 服务器使用的用户保持一致。CAS 配置我们要读取 Liferay 中的认证用户信息,就需要用 CAS 链接到 Liferay 的数据库。CAS 提供了通过 JDBC 连接数据库进行验证的缺省实现,
基于该包的支持,我们只需要做一些配置工作即可实现 JDBC 认证。JDBC 认证方法支持多种数据库,在此我们以 Mysql 数据库为例 :清单 4. 配置 dataSource &bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"&
&property name="driverClassName"
value="com.mysql.jdbc.Driver" /&
&property name="url" value="jdbc:mysql://localhost:3306/portaldb?
useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" /&
&property name="username" value="username" /&
&property name="password" value="password" /&
&/bean /&其中 id 属性为该 dataSource 的标识,在后面配置 authenticationManager 会被引用,
另外,需要提供 dataSource 所必需的数据库驱动程序、连接地址、数据库登录用户名以及登录密码。修改 cas.properties 配置文件清单 5. 配置 cas.properties host.name=cas
server.prefix=http://localhost:8080/cas
database.hibernate.dialect=org.hibernate.dialect.MySQLDialect加密方式修改CAS 默认使用了一套简单的密码验证,在 deployerConfigContext.xml 配置文件中,
为认证管理接口 authenticationManager 配置了属性 authenticationHandlers 处理器,
其中:&bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&
就是默认的认证处理逻辑,我们可以在下载到的压缩包找到他的源代码:cas-server-core\src\main\java\org\jasig\cas\authentication\handler\support\SimpleTestUsernamePasswordAuthenticationHandler.java,清单 6. 默认认证算法 public boolean authenticateUsernamePasswordInternal
(final UsernamePasswordCredentials credentials) {
final String username = credentials.getUsername();
final String password = credentials.getPassword();
if (StringUtils.hasText(username) && StringUtils.hasText(password)
&& username.equals(getPasswordEncoder().encode(password))) {
log.debug("User [" + username + "] was successfully authenticated.");
log.debug("User [" + username + "] failed authentication");
}默认的用户名和密码认证方式是只要校验用户名和密码相同,则认证通过。因此我们要对这种认证方式进行修改,
改为用户名和密码都采用 Liferay 中用户的校验方式。将默认的认证类注释掉,配置提供的 jdbc 认证:清单 7. 配置自定义 JDBC 认证方式 &!--
&bean class="org.jasig.cas.authentication.handler.support.
SimpleTestUsernamePasswordAuthenticationHandler" /&
&bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" &
&property name="sql" value="select password_ from user_ where screenName=?"/&
&property name="dataSource" ref="dataSource"/&
&property name="passwordEncoder" ref="mypasswordEncoder"/&
&/bean&属性 sql 配置为查询 Liferay 数据库表 user_,字段 password_ 和 screenName
其中 passwordEncoder 是对清单 7 中设置的实际加密器类的引用。
为了使用 Liferay 的密码加密方式,我们需要配置一个我们自己开发的密码加密类:清单 8. 指定具体加密类和加密算法 &bean id="mypasswordEncoder"
class="com.test.portal.cas.MyPasswordEncoder"&
&constructor-arg value="SHA"/&
&/bean&在此我们采用和 Liferay 一致的默认加密算法“SHA”,在调用 Liferay 提供的加密算法时,
我们需要将 Liferay 的几个 jar 包引入到我们的 cas 工程中,自定义的加密算法也很简单,
只需要调用 jar 包中的加密工具类提供的加密算法即可,同时自定义的类需要继承 PasswordEncoder 接口:清单 9. 自定义加密算法类 import javax.validation.constraints.NotN
import org.jasig.cas.authentication.handler.PasswordE
import com.liferay.portal.kernel.util.DigesterU
public final class MyPasswordEncoder implements PasswordEncoder {
private final S
public MyPasswordEncoder(final String algorithm) {
this.algorithm =
public String encode(final String password) {
String pass = DigesterUtil.digest(algorithm,password);
}至此 CAS 部分的配置就完成了,只需要再 Liferay 中进行相应的设置以后就可以使用了。Liferay 配置使用有管理权限的用户登录 Liferay,在控制面板中进入“设置”页面。再右侧的面板中选择“认证”,
进入 Liferay 认证设置。在用户如何认证的选项中选择“按屏幕名称”。选择“CAS”设置页面,选中“开启”,
修改登录 URL:http://demo1:8080/cas/login,修改注销 URL:http://demo1:8080/cas/logout,
修改服务器名称:demo1:8080,修改服务器 URL:http://demo1:8080/cas,
修改无用户时重定向的 URL:http://demo1:8080,点击测试 CAS 配置,验证通过后,保存配置。至此 Liferay 的配置也已经完成,此时点击“注销”用户,则根据配置,系统会跳转到 CAS 服务器的登录界面。使用 Liferay 的用户登录,
CAS 服务器会链接 Liferay 的数据库进行认证,认证成功后会跳转到 Liferay 的首页,表示 CAS 和 Liferay 的连接配置完成。图 5. 登录成功应用系统集成配置好 CAS 与 Liferay 的集成以后,我们可以通过 CAS 服务器进行单点登录,这样 Liferay 门户中集成的 Web 应用就可以采用 CAS 作为单点登录的服务器。
在实际使用中,还需要实现用户的同步,其他 Web 应用中的用户信息需要与 Liferay 数据库中的数据保持同步,
用户信息的同步可以使用 Liferay 提供的接口从 Liferay 的数据库中同步,也可以使用第三方的用户目录服务器进行同步,
具体的同步方法在此不做过多说明。结束语本文介绍了 使用 Liferay 集成 CAS 实现单点登录的解决方案,并结合实例讲解了在 Liferay 中使用 CAS 的配置、部署方法以及效果。
Liferay 是作为开源门户解决方案的一个不错选择,更多的使用细节可以参考 Liferay 官方网站。
参考资料 访问 站点访问 站点,了解 CAS 相关知识随时关注 developerWorks 和。
访问 developerWorks 获得丰富的 how-to 信息、工具和项目更新以及,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。下载最新版本的
,体验其强大的功能。下载最新版本的
的最新信息。加入 ,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。加入 ,参与在线交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Open sourceArticleID=847661ArticleTitle=Liferay 集成 CAS 实现单点登录与应用系统集成publish-date=

我要回帖

更多关于 可以连外网的软件 的文章

 

随机推荐