设为首页 收藏本站
查看: 493|回复: 0

[经验分享] CAS在Tomcat实现SSO

[复制链接]

尚未签到

发表于 2017-1-24 09:19:08 | 显示全部楼层 |阅读模式
  本文以tomcat6.0为例
  准备工作:下载cas-server-3.1.1-release.zipcas-client-java-2.1.1.zip。
  1、CAS Server
  CAS Server 是一套基于 Java 实现的服务,该服务以一个 Java Web Application 单独部署在与 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。
  2、配置 Tomcat 使用 Https 协议
      1)、生成key,在命令行中输入:keytool -genkey -alias mykey -keyalg RSA -keystore c:/tomcat.key
              产生别名为mykey的证书放到c:/tomcat.key。
             注意:您的名字与姓氏是什么?
  [Unknown]:  主机名或者IP最好是做了host映射的主机名,测试的时候最好写成localhost,不然通过 localhost访问会报错。
      2)、在tomcat的server.xml文件里加入,指定key文件地址。         

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="C:/tomcat.key"
/>
  3)、重启tomcat,就可以通过https://localhost:8443访问了。
  3、搭建CAS服务端
  1)、将下载的cas-server-3.1.1-release.zip解压
    2)、将解压包内的modules文件夹下的cas-server-webapp.war 拷贝到 tomcat的 webapps 目录,并更名为 cas.war
  可以重新启动 tomcat,然后访问:https://localhost:8443/cas ,如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。
  
4、扩展认证接口
  CAS Server通过spring进行的配置
  1)、配置查询用户数据源,打开文件 %CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,添加一个新的 bean 标签,以mysql为例。
  拷贝mysql jdbc jar到cas webapp 下。

    <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:3306/mydb?characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>admin</value>
</property>
</bean>
  2)、配置查询sql

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="casDataSource" />
<property name="sql"
value="select password from user where lower(username) = lower(?)" />
<property name="passwordEncoder" ref="myPasswordEncoder"/>
</bean>
<bean id="SearchModeSearchDatabaseAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="false" scope="singleton" lazy-init="default"
autowire="default">
<property  name="tableUsers">
<value>user</value>
</property>
<property name="fieldUser">
<value>username</value>
</property>
<property name="fieldPassword">
<value>password</value>
</property>
<property name="dataSource" ref="casDataSource"/>
</bean>
  3)、配置密码加密策略,这个类需要自己实现。

<bean id="myPasswordEncoder"
class="org.jasig.cas.util.MyPasswordEncoder"/>
  比如md5。

public class MyPasswordEncoder implements PasswordEncoder {
public String encode(String arg0) {
// TODO Auto-generated method stub
byte[] salt = PasswordUtil.getStaticSalt();
String ciphertext = PasswordUtil.encrypt("admin", arg0, salt);
return ciphertext;
}
}
  5、搭建CAS客户端
  1)、配置客户端服务器的HTTPS协议方法同服务端。
  2)、cas-client-java-2.1.1.zip解压并将casclient.jar拷贝到你的项目的lib目录下,/cas-client-java-2.1.1/lib下的所有包copy到WEB-INF/lib目录下。
  3)、交换秘钥,
  根据秘钥生成证书 keytool -export -file client.cert -alias mykey -keystore c:/tomcat.key。
  将证书导入到客户端keytool -import -trustcacerts -file client.cert -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias mykey。
  6、配置应用的filter
  新建两个webapp,作为单点登录的web应用,webcas1,webcas2,在各自的web.xml下加入filter,设置filter拦截请求到CAS服务器验证登录信息。

<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://casserver:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://localhost:8443/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>domain1:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://casserver:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://localhost:8443/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>domain2:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

// 以下两者都可以获取用户登录信息
session.getAttribute(CASFilter.CAS_FILTER_USER);
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");


7、测试SSO


当访问http://domain1:8080/webcas1的时候,服务器判断没有登录,会跳转到https://localhost:8443/cas/login,进行登录。

再次访问http://domain2:8080/webcas2的时候,就不用登陆了,可以根据session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
获取登录信息。

8、扩展CAS SERVER页面

我们想自己定义登陆界面和错误提示界面。

在部署 CAS 之前,我们可能需要定制一套新的 CAS Server 页面,添加一些个性化的内容。最简单的方法就是拷贝一份 default 或 simple 文件到“ cas/WEB-INF/view/jsp ”目录下,比如命名为 newUI,接下来是实现和修改必要的页面,有 4 个页面是必须的:

casConfirmView.jsp: 当用户选择了“ warn ”时会看到的确认界面
casGenericSuccess.jsp: 在用户成功通过认证而没有目的Service时会看到的界面
casLoginView.jsp: 当需要用户提供认证信息时会出现的界面
casLogoutView.jsp: 当用户结束 CAS 单点登录系统会话时出现的界面
CAS 的页面采用 Spring 框架编写,对于不熟悉 Spring 的使用者,在修改之前需要熟悉该框架。


页面定制完过后,还需要做一些配置从而让 CAS 找到新的页面,拷贝“ cas/WEB-INF/classes/default_views.properties ”,重命名为“ cas/WEB-INF/classes/ newUI_views.properties ”,并修改其中所有的值到相应新页面。最后是更新“ cas/WEB-INF/cas-servlet.xml ”文件中的 viewResolver。

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332719-1-1.html 上篇帖子: tomcat与web.xml配置 下篇帖子: 有关tomcat内存溢出问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表