当前位置: 首页 > java, linux, 所有文章 > 正文

CAS 单点登陆

技术文档
2012-10-31

CAS是个开源的SSO解决方案无侵入解决跨域问题。函括服务端,客户端(目前支持php,dotnet,java)实现。

系统要和CAS整合,只需要扩展认证接口就可以使用了。。
服务端下载:http://downloads.jasig.org/cas/
客户端下载:http://downloads.jasig.org/cas-clients/

开启https认证:CATALINA_HOME/conf/server.xml 查找SSL,将注释去掉。。在这个connect里添加属性keystoreFile =”下面生成证书的位置” keystorePass=”******” 这个pass稍后用keytools生成。
keytool -genkey -alias jysz -keyalg RSA 可以加-keystore 证书存储路径
根据提示生成证书.。秘钥填写和keystorePass一样的就行。。
keystoreFile参数获得的文件导入的时候验证有点问题。。
所以只能生成好再导出导入。。

keytool -export -alias idp -keypass changeit -file server.crt

证书认证:http://www.verisign.com/cn/

CAS服务端安装 解压压缩包之后目录内有个INSTALL.txt按照提示安装部署就可以访问了。。skin修改也可以参考INSTALL.txt
解压modules录下下的 war包。复制到 tomcat目录。

直接修改webapp项目,导入cas-server.tar.gz包下所有的项目模块。使用 eclipse 向导maven工程导入。然后检出svn://192.168.1.7/certificate/casweb/trunk
maven 打包部署 mvn package

选用CAS认证方式,采用CAS自带实现jdbc验证方式
打开WEB-INF/deployerConfigContext.xml
去掉SimpleTestUsernamePasswordAuthenticationHandler验证加入自定义验证方式。采用数据库jdbc验证,需要提供 jdbc驱动。直接拷贝到 lib目录下。。
例子:

<bean>
 <property name="dataSource" ref="dataSource" />
 <property name="sql" value="select password from _user where login_name=?" />
 <property name="passwordEncoder" ref="MD5PasswordEncoder"/>
</bean>

<bean id="dataSource">
   <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
   <property name="url"><value>jdbc:mysql:///192.168.1.9</value></property>
   <property name="username"><value>root</value></property>
   <property name="password"><value>root</value></property>
</bean>
 <!--加密方式,需要了解对方加密方式处理-->
<bean id="MD5PasswordEncoder">  
 <constructor-arg index="0">
  <value>MD5</value>
 </constructor-arg>
</bean>

 

客户端,我们这边是maven工程。不需要下载client包。直接添加依赖。。

<!-- cas -->
<dependency>
 <groupId>org.jasig.cas.client</groupId>
 <artifactId>cas-client-core</artifactId>
 <version>3.*.*</version>
</dependency>

 

配置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>CASFilter</filter-name>
 <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
 <init-param>
  <param-name>casServerLoginUrl</param-name>
  <param-value>https://sso.airfri.com:8443/cas/login</param-value>
  <!--这里的server是服务端的IP-->
 </init-param>
 <init-param>
  <param-name>serverName</param-name>
  <param-value>http://localhost:10000</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>CASFilter</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://sso.airfri.com:8443/cas</param-value>
 </init-param>
 <init-param>
  <param-name>serverName</param-name>
  <param-value>http://localhost:10000</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>CAS Validation Filter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

<!--
 该过滤器负责实现HttpServletRequest请求的包裹,
 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得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>

<!--
 该过滤器使得开发者可以通过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>

<!-- 自动根据单点登录的结果设置本系统的用户信息 -->
<filter>
 <display-name>AutoSetUserAdapterFilter</display-name>
 <filter-name>AutoSetUserAdapterFilter</filter-name>
 <filter-class>com.wsria.demo.filter.AutoSetUserAdapterFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>AutoSetUserAdapterFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

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

一切配置好之后,将keytool生成的签名证书导入到客户端服务器所使用java虚拟机目录
keytool -import -file server.crt –keypass 12369874 -keystore ..\jre\lib\security\cacerts

本文固定链接: http://blog.airfri.com/cas-%e5%8d%95%e7%82%b9%e7%99%bb%e9%99%86/ | KACARICH'S BLOG

该日志由 kaca.rich 于2012年11月01日发表在 java, linux, 所有文章 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: CAS 单点登陆 | KACARICH'S BLOG
关键字:

CAS 单点登陆:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter