服务端配置
cas是个好东西,很灵活很好用,但是配置起来很麻烦

cas官方网站

http://downloads.jasig.org/

下载服务端 CAS Server 3.3.3 Final

1、将服务器端解压,将modules下面的cas-server-webapp-3.3.3.war部署到web服务器,重命名为CAS.war,作为单点的服务器。

2、导入modules中的cas-server-support-jdbc-3.3.3.jar包

3、导入数据库驱动

4、导入附件中的所有文件
(commons-dbcp.jar,commons-pool-1.3.jar,spring.jar)

数据库:
CREATE TABLE `users` (
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `is_admin` int(11) DEFAULT NULL,
  `id` int(11) DEFAULT NULL
)

insert  into
`users`(`username`,`password`,`is_admin`,`id`) values
('zjx','202cb962ac59075b964b07152d234b70',1,123);

登录的服务器下面很多配置文件,通过配置可以做一些扩展。

修改点1:验证方式使用我们自己的用户表验证

cas和当前已有的系统做集成的入口

1.修改deployerConfigContext.xml文件

添加数据源配置

XML/HTML代码

<bean id="casDataSource"
class="org.apache.commons.dbcp.BasicDataSource">

<property
name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

<property
name="url">

<value>jdbc:mysql://localhost/ires?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true</value>

</property>

<property
name="username">

<value>root</value>

</property>

<property
name="password">

<value>i709394</value>

</property>

</bean>

定义MD5的加密方式

XML/HTML代码

<bean
id="passwordEncoder"

class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
>

<constructor-arg
value="MD5"/>

</bean>

配置authenticationManager下面的authenticationHandlers属性

XML/HTML代码

<bean
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

<property name="dataSource" ref="casDataSource"
/>  
     
<property name="sql" value="select password from
users where username = ?"
/>  
     
<property 
name="passwordEncoder" 
ref="passwordEncoder"/>

</bean>

修改点2:获取用户信息保存,方便各个客户端可以统一得到用户信息

1.定义attributeRepository,通过jdbc查询用户的详细信息,可以把用户表或用户的所属组织机构或角色等查询出来。

XML/HTML代码

<bean id="attributeRepository"
class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">

<constructor-arg index="0"
ref="casDataSource"
/>  
 <constructor-arg index="1"
>  
  <list>

<value>username</value>

</list>

</constructor-arg>

<constructor-arg
index="2">  
  <value>

select
id,username,is_admin from users where username =
?  
  </value>

</constructor-arg>

<property
name="columnsToAttributes">

<map>

<entry
key="id" value="id"
/>  
   <entry
key="username" value="username"
/>  
   <entry
key="is_admin" value="is_admin"
/>

</map>

</property>

</bean>

2.配置authenticationManager中credentialsToPrincipalResolvers属性

XML/HTML代码

<bean
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">

<property name="attributeRepository"
ref="attributeRepository"
/>  
</bean>

注意:默认cas登录服务器没有把用户信息传到客户端中,所以要修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,增加

XML/HTML代码

<c:if
test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)
>
0}">  
<cas:attributes>

<c:forEach var="attr"
items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">

<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>

</c:forEach>

</cas:attributes>

</c:if>

修改点3:用数据库来保存登录的会话

这样服务器在重新启动的时候不会丢失会话。

1.修改ticketRegistry.xml文件

将默认的ticketRegistry改成

XML/HTML代码

<bean id="ticketRegistry"
class="org.jasig.cas.ticket.registry.JpaTicketRegistry">

<constructor-arg index="0"
ref="entityManagerFactory"
/>  
   
</bean>

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

<property name="dataSource"
ref="dataSource"/>

<property
name="jpaVendorAdapter">

<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">

<property name="generateDdl"
value="true"/>

<property name="showSql" value="true"
/>  
           
</bean>

</property>

<property
name="jpaProperties">

<props>

<prop
key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop
key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

</bean>

<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager"

p:entityManagerFactory-ref="entityManagerFactory"
/>  
  
   
<tx:annotation-driven
transaction-manager="transactionManager"/>

<bean  
       
id="dataSource"  
       
class="org.apache.commons.dbcp.BasicDataSource"

p:driverClassName="com.mysql.jdbc.Driver"

p:url="jdbc:mysql://192.168.1.100:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"

p:password="709394"  
       
p:username="itravel"
/>

配置完之后还需要一些jar的支持,根据提示那些包缺少到网上找。

修改点4:配置remenber me的功能,可以让客户端永久保存session

1.修改deployerConfigContext.xml文件

authenticationManager增加authenticationMetaDataPopulators属性

XML/HTML代码

<property
name="authenticationMetaDataPopulators">

<list>

<bean
class="org.jasig.cas.authentication.principal.RememberMeAuthenticationMetaDataPopulator"
/>  
   
</list>

</property>

2.修改cas-servlet.xml

修改authenticationViaFormAction配置变成

XML/HTML代码

<bean id="authenticationViaFormAction"
class="org.jasig.cas.web.flow.AuthenticationViaFormAction"

p:centralAuthenticationService-ref="centralAuthenticationService"

p:formObjectClass="org.jasig.cas.authentication.principal.RememberMeUsernamePasswordCredentials"

p:formObjectName="credentials"

p:validator-ref="UsernamePasswordCredentialsValidator"

p:warnCookieGenerator-ref="warnCookieGenerator"
/>

增加UsernamePasswordCredentialsValidator

XML/HTML代码

<bean id="UsernamePasswordCredentialsValidator"
class="org.jasig.cas.validation.UsernamePasswordCredentialsValidator"
/>

修改ticketExpirationPolicies.xml,grantingTicketExpirationPolicy配置如下,注意时间要加大,不然session很容易过期,达不到remember
me的效果。

XML/HTML代码

<bean id="grantingTicketExpirationPolicy"
class="org.jasig.cas.ticket.support.RememberMeDelegatingExpirationPolicy">

<property
name="sessionExpirationPolicy">

<bean
class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">

<constructor-arg index="0" value="2592000000"
/>  
   
</bean>

</property>

<property
name="rememberMeExpirationPolicy">

<bean
class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">

<constructor-arg index="0" value="2592000000"
/>  
   
</bean>

</property>

</bean>

修改点5:取消https验证

在网络安全性较好,对系统安全没有那么高的情况下可以取消https验证,使系统更加容易部署。

1.修改ticketGrantingTicketCookieGenerator.xml

XML/HTML代码

<bean id="ticketGrantingTicketCookieGenerator"
class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"

p:cookieSecure="false"  
       
p:cookieMaxAge="-1"  
       
p:cookieName="CASTGC"  
       
p:cookiePath="/cas"
/>

p:cookieSecure改成false,客户端web.xml中单独服务器的链接改成http

warnCookieGenerator.xml的p:cookieSecure同样设置为false

deployerConfigContext.xml 改成:
<bean
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"  
p:httpClient-ref="httpClient"
p:requireSecure="false"/>
增加p:requireSecure="false"

使用https协议的配置

1.证书生成和导入

下面是一个生成证书和导入证书的bat脚本,如果web应用和单独登录服务器部署在同一台机可以一起执行

C++代码

@echo
off   
if "%JAVA_HOME%" == "" goto
error   
@echo
on   
  
@echo
off   
cls

rem please set the env JAVA_HOME before run this bat
file

rem delete alia tomcat if it is
existed

keytool -delete -alias tomcatsso -keystore
"%JAVA_HOME%/jre/lib/security/cacerts" -storepass
changeit

keytool -delete -alias tomcatsso -storepass
changeit

REM (注释: 清除系统中可能存在的名字为tomcatsso
的同名证书)   
rem list all alias in the
cacerts

keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"
-storepass
changeit

REM (注释:
列出系统证书仓库中存在证书名称列表)

rem generator a
key

keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=localhost"
-storepass
changeit

REM (注释:指定使用RSA算法,生成别名为tomcatsso的证书,存贮口令为changeit,证书的DN为"cn=linly"
,这个DN必须同当前主机完整名称一致哦,切记!!!)

rem export the
key

keytool -export -alias tomcatsso -file
"%java_home%/jre/lib/security/tomcatsso.crt" -storepass
changeit

REM (注释:
从keystore中导出别名为tomcatsso的证书,生成文件tomcatsso.crt)

rem import into trust
cacerts

keytool -import -alias tomcatsso -file
"%java_home%/jre/lib/security/tomcatsso.crt" -keystore
"%java_home%/jre/lib/security/cacerts" -storepass
changeit

REM
(注释:将tomcatsso.crt导入jre的可信任证书仓库。注意,安装JDK是有两个jre目录,一个在jdk底下,一个是独立的jre,这里的目录必须同Tomcat使用的jre目录一致,否则后面Tomcat的HTTPS通讯就找不到证书了)

rem list all alias in the
cacerts

keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"
-storepass
changeit

pause   
  
:error   
echo
请先设置JAVA_HOME环境变量

:end

3.将.keystore文件拷贝到tomcat的conf目录下面,注意.keystore会在证书生成的时候生成到系统的用户文件夹中,如windows会生产到C:\Documents
and Settings\[yourusername]\下面

2.配置tomcat,把https协议的8443端口打开,指定证书的位置。

XML/HTML代码

<Connector port="8443"
maxHttpHeaderSize="8192"  
             
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"  
             
enableLookups="false"
disableUploadTimeout="true"

acceptCount="100" scheme="https"
secure="true"  
             
clientAuth="false"
sslProtocol="TLS"

keystoreFile="conf/.keystore" 
keystorePass="changeit"  
truststoreFile="C:\Program
Files\Java\jdk1.5.0_07\jre\lib\security\cacerts"/>

客户端配置

cas官方网站上面的客户端下载地址比较隐秘,没有完全公开,具体地址为

http://www.ja-sig.org/downloads/cas-clients/

下载最新的cas-client-3.1.6-release.zip(http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.6-release.zip)

1.解压后把modules下面的包放到我们的web应用中

serverName是我们web应用的地址和端口

XML/HTML代码

注意serverName是客户端应用

<context-param>

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

<param-value>http://192.168.1.145:81</param-value>

</context-param>

<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>

<listener>

<listener-class>

org.jasig.cas.client.session.SingleSignOutHttpSessionListener

</listener-class>

</listener>

<filter>

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

<filter-class>

org.jasig.cas.client.authentication.AuthenticationFilter

</filter-class>

<init-param>

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

<param-value>http://192.168.1.100/cas/login</param-value>

</init-param>

</filter>

<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>http://192.168.1.100/cas</param-value>

</init-param>

</filter>

<filter>

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

<filter-class>

org.jasig.cas.client.util.HttpServletRequestWrapperFilter

</filter-class>

</filter>

<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 Authentication
Filter</filter-name>

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

</filter-mapping>

<filter-mapping>

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

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

</filter-mapping>

<filter-mapping>

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

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

</filter-mapping>

<filter-mapping>

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

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

</filter-mapping>

3.导入证书,如果不用https的话,这步可以跳过,把tomcatsso.crt证书拷贝到c盘下面,在jdk的bin目录下面运行下面的语句。

JavaScript代码

rem (注释: 清除系统中可能存在的名字为tomcatsso
的同名证书)   
keytool -delete -alias tomcatsso -keystore
"%JAVA_HOME%/jre/lib/security/cacerts" -storepass
changeit

keytool -delete -alias tomcatsso -storepass
changeit

rem 在客户端的 JVM 里导入信任的 SERVER 的证书 ( 根据情况有可能需要管理员权限
)

keytool -import -alias tomcatsso -file "c:/tomcatsso.crt" -keystore
"%java_home%/jre/lib/security/cacerts" -storepass
changeit

客户端获取登录用户名和用户信息实例

Java代码

AttributePrincipal principal = (AttributePrincipal) request
    .getUserPrincipal();

String username = principal.getName();

System.out.println(username);

System.out.println(principal.getAttributes().get("id"));
System.out.println(principal.getAttributes().get("username"));

System.out.println(principal.getAttributes().get("is_admin"));

response.setContentType("text/plain");
response.getWriter().println("zjx");

cas 单点登录配置的更多相关文章

  1. CAS单点登录配置[1]:准备工作

    关于CAS是什么这里就不在赘述,网友将它比喻成旅游景点的套票,买了一个套票就可以观看所有景点,不需要一个景点买一次票...我们重点介绍CAS单点登录的配置. 工具/原料 1.配置好JDK环境,否则不方 ...

  2. Liferay7.0与cas单点登录配置

    1.简介     Liferay7.0支持多种登录方式,包括:常规的.opensso.cas.ntlm.ldap.openid.Facebook.Google等. 其中, (1) 常规:则是默认Lif ...

  3. CAS单点登录配置[3]:服务器端配置

    在准备工作,证书生成等工作完成后,本篇介绍服务器端的配置. JDK配置 1 我们将生成的cacerts文件分别拷贝到JDK目录下的jre/lib/security目录下及JRE对应的目录中,如果之前存 ...

  4. CAS单点登录配置[5]:测试与总结

    终于要结束了... 测试 1 我们同时打开Tomcat6和Tomcat7,如果报错请修改. 打 开浏览器,输入http://fighting.com/Client1,进入CAS登录界面,这里我们先输入 ...

  5. CAS单点登录配置[4]:客户端配置

    本节介绍一下客户端如何配置,客户端配置没有服务端那么复杂... 客户端Tomcat配置 1 首先确认证书文件已经拷贝到Tomcat的目录下,我们新建两个客户端的web应用,分别命名为Client1,C ...

  6. Cas单点登录配置数据查询用户

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. CAS单点登录配置[2]:证书生成

    上一篇介绍了准备工作,本片将介绍如何生成证书. 服务器端证书 1 我们在F盘下建立一个cas文件夹,在此文件夹中生成证书文件,打开命令窗口,进入此目录下,如图: 2 生成服务器端证书, 此命令用于在当 ...

  8. CAS单点登录配置

    见http://download.csdn.net/detail/u010786672/6942715下载.

  9. CAS单点登录系列之极速入门于实战教程(4.2.7)

    @ 目录 一. SSO简介 1.1 单点登录定义 1.2 单点登录角色 1.3 单点登录分类 二. CAS简介 2.1 CAS简单定义 2.2 CAS体系结构 2.3 CAS原理 三.CAS服务端搭建 ...

随机推荐

  1. SVM对偶形式

    dual svm 对偶SVM linear SVM 可以用二次规划方法解 xn通过非线性转换变成zn SVM配合非线性特征转换 透过large-margin降低模型复杂度 透过特征转换得到弯弯曲曲的边 ...

  2. Win32中GDI+应用(三)---Graphics类

    在我理解看来,Graphics是一个device context和你的drawing conetent之间的一个中介.它存储了device context的相关属性,以及drawing content ...

  3. Bad owner or permissions on .ssh/config

    Bad owner or permissions on $HOME/.ssh/config The ssh with RHEL 4 is a lot more anal about security ...

  4. gooflow0.6的流程设计

    为何使用gooflow:1.兼容性好 2.扩展点很多可以个性化设计 3.配有api文档 4.json格式的数据传输 gooflow0.8版 由于最近项目需要,急需设计一个流程,考虑到时间问题,和用户个 ...

  5. SQL的四种语言和数据库范式

    1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...

  6. VPN ,Bypass the FIrewall

    Bypass the China Firewall Methods November 16th, 2012Posted in , Tech With their assortment of techn ...

  7. Laravel框架——任务调度(cron)

    准备: 在服务的/var/spool/cron/root文件中添加代码 cd /var/spool/cron/root 添加以下代码 * * * * * phppath 项目路径/artisan sc ...

  8. 学习Swift -- 析构过程

    析构过程 析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用.析构器用关键字deinit来标示,类似于构造器要用init来标示. 原理 Swift 会自动释放不再需要的实例以释放资源, ...

  9. UFLDL教程(五)之self-taught learning

    这里所谓的自学习,其实就是利用稀疏自编码器对无标签样本学习其特征 该自学习程序包括两部分: 稀疏自编码器学习图像特征(实现自学习)---用到无标签的样本集 softmax回归对样本分类---用到有标签 ...

  10. 完全卸载mysql 停止服务、卸载相关程序、删除注册表

    本节主要介绍了完全卸载mysql的具体步骤包括停止服务.卸载相关程序.删除注册表等等   1. 停止服务MySQL 2. 卸载mysql相关的程序 3. 删除注册表(运行->regedit),m ...