- 浏览: 101032 次
- 性别:
- 来自: 北海
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
IE下利用js实现打印功能 -
sunxiyuan111:
试了第三种方法 ,管用,解决了大问题谢谢
jasperreports导出pdf报表时粗体的显示问题 -
java爱好者92:
主子报表帆软报表官网上的攻略说得很详细,可以参考一下
利用iReport制作子报表 -
fengjianquan9527:
狗屁不通,毛用不管
jasperreports导出pdf报表时粗体的显示问题 -
xiegqooo:
codeloafer 写道现在activemq5.6 以上ne ...
ActiveMQ集群应用
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。如附件“cas原理.jpg”所示。
CAS Client 与受保护的应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定的 CAS Server 登录地址,并传递要访问的目的资源地址,以便登录成功过后重定向到该地址。用户在输入认证信息后,如果登录成功,CAS Server 随机产生一个 Service Ticket,并缓存该Service Ticket以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
以下内容基于CAS Client与CAS Server的交互采用SSL协议。
1.环境:JDK1.6+Tomcat6.0.32+cas-Server3.4.31+cas-Client3.1.12
2.利用JDK的keytool生成证书
在生产环境中,证书需要到证书提供商处购买。
正确设置%JAVA_HOME%,在DOS窗口下运行以下命令:keytool -genkey -alias wsria -keyalg RSA -keystore E:/sso/keys/dcssokey 如附件“生成证书截图.jpg”所示。这样在 E:/sso/keys目录下就会生成dcssokey的文件。
3.设置域名
cas建议用域名访问而不用IP地址访问,所以要设置一下域名,在C:\Windows\System32\drivers\etc下修改hosts文件,加入:(IP)10.5.227.125 sso.unifyaa.com(不要用127.0.0.1)
4.导出证书
利用keytool命令导出证书,如附件“导出证书.jpg”所示。这样在 E:/sso/keys目录下就会生成dcsso.crt的文件。
5.为JVM导入证书
利用keytool名利为JVM导入证书,导入之前先确定%JAVA_HOME%\jre\lib\security目录下是否存在cacerts的文件,如果存在则删除该文件,利用keytool命令为JVM导入证书,如附件“JVM导入证书.jpg”所示。
6.web服务器应用证书
修改%TOMCCAT_HOME%/conf/server.xml文件,
<!-- 启用HTTPS协议 -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="E:/sso/keys/dcssokey" keystorePass="dcfs00"
truststoreFile="D:/ProgramFiles/Java/jdk1.6.0_25/jre/lib/security/cacerts" />
启动tomcat,在浏览器输入地址:https://sso.unify.com:8443 就会提示证书安全问题,点击“继续浏览”就可进入tomcat目录。
7.部署CAS Server应用
解压下载的cas-server-3.4.3.1.zip包,在cas-server-3.4.3.1\modules目录下找到cas-server-webapp-3.4.3.1.war文件,把该文件拷贝至%TOMCAT_HOME%\webapps下,并改名为cas.war,
重启tomcat,在浏览器输入https://sso.unifyaa.com:8443/cas/login 弹出cas的登录界面,如附件“cas登录界面.jpg”所示。
在登录界面输入admin/admin,登录成功,如附件“cas登录成功界面.jpg”所示。
注:在CAS Server中,默认使用org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler类作登录身份认证处理,这个不适用生产环境,我们需要使用定制化的AuthenticationHandler。
8.定制CAS Server的用户身份认证接口
CAS 提供扩展认证的核心是 AuthenticationHandler 接口。CAS还提供了 AuthenticationHandler 接口的一些抽象实现,以满足我们的复杂应用,如:AbstractPreAndPostProcessingAuthenticationHandler,可在身份认证前后做一些操作。对于最常用的用户名/密码认证方式,CAS也提供了支持,由类AbstractUsernamePasswordAuthenticationHandler提供支持。
通常用户信息一般都存在于数据库,我们通过JDBC的方式来验证用户信息。CAS提供了通过JDBC连接数据库认证用户的默认实现,需要/cas-server-3.4.3.1/modules/cas-server-support-jdbc-3.4.3.1.jar包的支持。把该包
copy到tomcat的webapps下的cas.war的WEB-INF/lib下。
增加dataSource。在tomcat的/webapps/cas/WEB-INF/deployerConfigContext.xml添加以下内容:
<bean id="casDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 最大连接数 --> <property name="maxPoolSize" value="${hibernate.c3p0.max_size}" /> <!-- 最小连接数 --> <property name="minPoolSize" value="${hibernate.c3p0.min_size}" /> <!-- 初始化连接数 --> <property name="initialPoolSize" value="${hibernate.c3p0.initial_pool_size}" /> <!-- 最大空闲时间 ,120秒内未使用则连接被丢弃。若为0则永不丢弃 --> <property name="maxIdleTime" value="${hibernate.c3p0.max_idle_time}" /> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="acquireIncrement" value="${hibernate.c3p0.acquire_increment}" /> <!-- 最大的PreparedStatement的数量 --> <property name="maxStatements" value="${hibernate.c3p0.max_statements}" /> <!-- 每隔120秒检查连接池里的空闲连接--> <property name="idleConnectionTestPeriod" value="${hibernate.c3p0.idle_test_period}" /> <!-- 如果设为true那么在取得连接的同时将校验连接的有效性 。Default: false --> <property name="testConnectionOnCheckin" value="${hibernate.c3p0.test_connection_on_checkin}" /> <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> <property name="acquireRetryAttempts" value="${hibernate.c3p0.acquire_retry_attempts}" /> <!--连接关闭时默认将所有未提交的操作回滚。Default: false --> <property name="autoCommitOnClose" value="${hibernate.c3p0.auto_commit_on_close}" /> <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。 如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false--> <property name="breakAfterAcquireFailure" value="${hibernate.c3p0.break_after_acquire_failure}" /> <!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。Default: 3--> <property name="numHelperThreads" value="${hibernate.c3p0.num_helper_threads}" /> <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。Default: 0 --> <property name="checkoutTimeout" value="${hibernate.c3p0.checkout_timeout}" /> </bean>
以上用的是c3p0作为dataSource的实现,dataSource的作用大家都比较清楚,这里就不做解释了。
在tomcat的\webapps\cas\WEB-INF目录下新建两个文件,分别是jdbc.properties和c3p0.properties,内容如下:
jdbc.properties
# Properties file with JDBC-related settings. # Applied by PropertyPlaceholderConfigurer from "applicationContext.xml". # Targeted at system administrators, to avoid touching the context XML files. ## MySQL jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://10.5.227.125:3306/dcsso?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=root ## Oracle #jdbc.driverClassName=oracle.jdbc.driver.OracleDriver #jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl #jdbc.username=ccgd #jdbc.password=ccgd ## H2 #jdbc.driverClassName=org.h2.Driver #jdbc.url=jdbc:h2:tcp://localhost/~/test #jdbc.username=sa #jdbc.password=
c3p0.properties
########################### ### C3P0 Connection Pool### ########################### hibernate.c3p0.max_size 50 hibernate.c3p0.min_size 2 hibernate.c3p0.initial_pool_size 3 hibernate.c3p0.max_idle_time 120 hibernate.c3p0.acquire_increment 2 hibernate.c3p0.max_statements 100 hibernate.c3p0.idle_test_period 120 hibernate.c3p0.test_connection_on_checkin true hibernate.c3p0.acquire_retry_attempts 30 hibernate.c3p0.auto_commit_on_close false hibernate.c3p0.break_after_acquire_failure false hibernate.c3p0.num_helper_threads 3 hibernate.c3p0.checkout_timeout 30000 hibernate.c3p0.validate true
c3p0需要jar包的支持,c3p0-0.9.1.jar、commons-collections-3.2.1.jar、commons-pool-1.5.4.jar,同时把数据库连接驱动(这里用mysql)mysql-connector-java-5.1.6.jar包都copy到cas/WEB-INF/lib下。
在tomcat的\webapps\cas\WEB-INF\spring-configuration目录下找到propertyFileConfigurer.xml文件,修改如下:
propertyFileConfigurer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <description> This file lets CAS know where you've stored the cas.properties file which details some of the configuration options that are specific to your environment. You can specify the location of the file here. You may wish to place the file outside of the Servlet context if you have options that are specific to a tier (i.e. test vs. production) so that the WAR file can be moved between tiers without modification. </description> <!-- <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="/WEB-INF/cas.properties" /> --> <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>/WEB-INF/cas.properties</value> <value>/WEB-INF/jdbc.properties</value> <value>/WEB-INF/c3p0.properties</value> </list> </property> </bean> </beans>
让应用启动的时候加载jdbc.properties和c3p0.properties文件。
修改cas/WEB-INF下的deployerConfigContext.xml文件。注释掉以下内容:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
添加以下内容:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="casDataSource" /> <property name="sql" value="select password from loginusers where lower(loginName) = lower(?)" /> <property name="passwordEncoder" ref="passwordEncoder"/> </bean>
我们可以使用QueryDatabaseAuthenticationHandler,也可以使用SearchModeSearchDatabaseAuthenticationHandler,使用SearchModeSearchDatabaseAuthenticationHandler的配置如下:
<bean id="SearchModeSearchDatabaseAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="tableUsers"> <value>loginusers</value> </property> <property name="fieldUser"> <value>loginName</value> </property> <property name="fieldPassword"> <value>password</value> </property> <property name="dataSource" ref=" casDataSource " /> </bean>
由于我们的密码一般都是经过加密的,所以在认证信息的时候需要对用户提交的密码进行加密,CAS提供了MD5加密的默认实现,配置如下:
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName"> <constructor-arg value="MD5"/> </bean>
然后在mysql数据库中新建一张表:loginUsers,字段为loginname和password,并新增一条记录,启动tomcat,在浏览器输入https://sso.unify.com:8443/cas/login,会提示证书错误,点击继续浏览就可以了,在登录界面输入新建记录的用户名和密码,就可以登录成功了。
附:
若CAS Server与CAS Client的交互不想使用SSL协议,则注释掉%TOMCAT_HOME%\conf\server.xml文件中的这段内容:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="E:/sso/keys/dcssokey" keystorePass="dcfs00" truststoreFile="D:/ProgramFiles/Java/jdk1.6.0_25/jre/lib/security/cacerts" />
在%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml文件中找到如下内容:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
在/>前加上如下内容:p:requireSecure="false",表示不需要安全协议。
接着在%TOMCAT_HOME%\webapps\cas\WEB-INF\spring-configuration目录下修改ticketGrantingTicketCookieGenerator.xml文件,修改后的内容如下:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="600" p:cookieName="CASTGC" p:cookiePath="/cas" />
p:cookieSecure="false",表示cookie也不需要安全协议,p:cookieMaxAge设置cookie的有效时长。
重启tomcat,在浏览器输入http://sso.unifyaa.com:8080/cas/login 就可以访问了。
发表评论
-
cas客户端应用实现
2011-12-20 15:51 6637cas服务器端的开发请参考: http://xiaomage ... -
java开发webservice的几种方式
2011-12-17 15:33 10731webservice的应用已经越来 ... -
compass搜索引擎的应用
2011-09-12 11:29 2732前阵子在做一个手机服务器端系统的开发,主要使用spring+h ... -
spring security 3.0 实现认证与授权
2011-07-10 20:11 1971先看一下spring security 官方对以下几个类或接口 ... -
EJB系统使用JMS异步发送邮件
2011-01-26 15:58 2063EJB中有三种Bean,EntityBean,SessionB ... -
jasperreports导出pdf报表时粗体的显示问题
2010-12-23 17:14 6424最近一直在做报表,用的是iReport3.7.3和jasper ... -
利用iReport制作子报表
2010-12-10 16:09 5731iReport版本:3.7.3,JavaBean作为数据源。1 ... -
解决GET提交中文乱码问题
2010-11-19 15:20 2635今天同事在做一个手机 ... -
IE下利用js实现打印功能
2010-10-29 11:08 3565这主要是用到了IE的一个内置插件,在html代码的<he ... -
struts2+jasperReport生成各种形式的报表
2010-10-28 17:10 2847/** * 導出html形式報表 * @param r ... -
利用js给select element产生年份
2010-10-25 16:32 2634function generateYearFun() { v ... -
解决struts2+jasperReport在生成html形式的报表时的图片问题
2010-10-18 14:09 3466Struts2和jasperReport整合时,在生成html ... -
struts2 java.lang.IllegalStateException异常的解决方法
2010-10-15 18:46 4880环境:eclipse+struts2+EJB3.0+jaspe ... -
Tomcat JVM调优有感
2010-09-25 22:42 2106最近在做一个社交类网 ... -
struts2+ajax做的一个级联下拉列表
2010-09-20 14:47 2640struts2+ajax做的一个级联下拉列表 struts端代 ... -
struts2+jsonplugin的问题
2010-09-15 00:16 1276[size=xx-small]今天做项目碰到了个问题,在做一个 ... -
关于embed标签的src属性
2010-09-05 16:47 1805前阵子做个项目,需要把用户上传的pdf文件转换为swf文件然后 ... -
ssh与jbpm4.3的整合
2010-05-28 20:23 1447首先说一下环境,spring3.0+struts2+hiber ...
相关推荐
寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...