CAS服务器的搭建和Java项目集成

最近项目需要,需要做一个单点登陆的功能,由于之前没有接触过SSO,不是很了解,查阅资料后 选择使用CAS作为研究对象。CAS是有耶鲁大学研发的单点登录服务器。

借鉴了:http://blog.csdn.net/small_love/article/details/6664831的经验,

1.开发环境

  •  tomcat7
  •  CAS Service 版本    cas-server-4.0.0
  •    CAS Client   版本    cas-client-3.3.3
  •    eclipse
  •    jdk1.7

2.开发步骤大致分为三部

  •   生成证书
  •   配置服务端
  •   配置客户端
  •   配置数据库连接
  •   测试

3.生成证书

  证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了 JDK自带的证书生成工具keytool。

  1. 生成证书

      

命令:keytool -genkey -alias  sslverisign -keyalg RSA -keystore D:/keys/smallkey

  其中sslverisign是生成证书的一个别名 自定义  D:/keys/smallkey 是生成的路径 一定要确保生成的路径是存在的,smallkey会自己创建。

  命令执行后如下图:

    

      其中名字与姓氏这一最好写你的域名,如果在单击测试你可以在C:\Windows\System32\drivers\etc\hosts文件中映射一个虚拟域名。

      不要写IP 其中红字部分非常重要,在后面还会用到。

       配置本地虚拟域名的方法为:C:\Windows\System32\drivers\etc\hosts 找到hosts文件 打开编辑输入如下:

    

    配置的时候 该文件有时候无法修改不能保存,自个百度吧 有解决方案。

     2.导出证书

  

C:\>keytool -export -file d:/keys/ssl.crt -alias sslverisign -keystore d:/keys/smallkey
ssl.crt 为生成证书的名字  sslverisign为第一步生成的证书别名 
执行后 如下图:

 

   密码为第一步自己所设定的密码

 3.把证书导入到客户端JDK中

命令:keytool -import -keystore C:\Java\jdk1.7.0_15\jre\lib\security\cacerts -file D:/keys/ssl.crt -alias sslverisign

    执行如下:

  

   导入成功.

   该步骤容易出现的问题就是:

   1.keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect

   错误的解决方法是,把%JAVA_HOME%\lib\security下的cacerts文件删除掉,在执行 

   2. 还有就是jdk存放的位置路径如果存在空格也会导致导入证书不成功,提示非法(默认安装jdk的时候如:C:\Program Files 存在空格 将会导致导入不成功),需要注意。

 

4.配置服务端

 1、 下载CAS的服务端cas-server-4.0.0-release.zip解压,把解压后的文件中modules文件夹中的cas-server-webapp-4.0.0.war文件拷贝的D:\apache-tomcat7\webapps目录下并改重命名为cas.war 下载地址:http://downloads.jasig.org/cas/
2、修改D:\apache-tomcat7\conf\server.xml文件去掉此文件83到93行之间的注释,修改为:



keystoreFile="D:/keys/smallkey"  <!--生成证书的时候的路径-->
keystorePass="smalllove"/>       <!--在生成证书的时候设置的密码--> 
设置完成后手动启动tomcat:D:\apache-tomcat7\bin\startup.bat  点击该bat文件运行。

 如果运行出现如下错误 导致启动不成功。

   严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-443"]
 java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

   需要修改D:\apache-tomcat7\conf\server.xml  找到如下注释掉:

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

3、以上配置完成访问https://www.deng.com:8443/cas出现以下页面



点击继续浏览此网页,后出现



由于我们用的是cas4.0的版本 所以默认的初始账号是密码是 casuser Mellon 之前看很多教程用的是3.4的版本 那时候初始账号和密码是admin

输入账号密码后 会出现如下界面 表示登陆成功 服务器端配置完成。

  

5.配置客户端
下载客户端:http://downloads.jasig.org/cas-clients/,目前最新版本为:cas-client-3.3.3,然后解压cas-client-3.1.12.zip,在modules文件夹中有需要的jar包(cas-client-core-3.3.3.jar,jul-to-slf4j-1.6.1.jar,log4j-over-slf4j-1.6.1.jar,slf4j-api-1.7.1.jar).
由于自己要做测试测试两个项目登陆后是否能实现单点,在单独部署一个tomcat服务器(加之前部署修改的一共两个),如果是解压包的tomcat,就把之前的tomcat复制一个出来,打开D:\apache-tomcat-7.0.40\conf\server.xml文件,修改他的端口号保证两个tomcat启动后不冲突。
第22行修改后 <Server port="8055" shutdown="SHUTDOWN">
第70到74 修改后
    <Connector port="18080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18443" />
第97行 修改后 
<Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />
登陆新建两个WEB工程 打开web.xml文件配置如下信息,我cas服务器用的默认的tomcat端口号,所以web项目我部署在后面修改端口后的tomcat上18080:
两个web工程配置一样 可以在默认的index.html页面上标注一下区别。
 1 <!-- ======================== 单点登录开始 ======================== -->  
 2     <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->  
 3     <listener>  
 4         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  
 5     </listener>  
 6   
 7     <!-- 该过滤器用于实现单点登出功能,可选配置。 -->  
 8     <filter>  
 9         <filter-name>CAS Single Sign Out Filter</filter-name>  
10         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  
11     </filter>  
12     <filter-mapping>  
13         <filter-name>CAS Single Sign Out Filter</filter-name>  
14         <url-pattern>/*</url-pattern>  
15     </filter-mapping>  
16   
17     <!-- 该过滤器负责用户的认证工作,必须启用它 -->  
18     <filter>
19         <filter-name>CASFilter</filter-name>
20         <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
21         <init-param>
22             <param-name>casServerLoginUrl</param-name>
23             <param-value>https://www.deng.com:8443/cas/login</param-value>
24             <!--这里的server是服务端的IP -->
25         </init-param>
26         <init-param>
27             <param-name>serverName</param-name>  
28             <param-value>http://www.deng.com:18080</param-value> 
29         </init-param>                                        
30     </filter>  
31     <filter-mapping>  
32         <filter-name>CASFilter</filter-name>
33         <url-pattern>/*</url-pattern>
34     </filter-mapping>
35   
36     <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
37     <filter>  
38         <filter-name>CAS Validation Filter</filter-name>  
39         <filter-class>  
40             org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>  
41         <init-param>  
42             <param-name>casServerUrlPrefix</param-name>  
43             <param-value>https://www.deng.com:8443/cas</param-value>  
44         </init-param>  
45         <init-param> 
46             <param-name>serverName</param-name>  
47             <param-value>http://www.deng.com:18080</param-value>   
48         </init-param>  
49     </filter>
50     <filter-mapping>  
51         <filter-name>CAS Validation Filter</filter-name>  
52         <url-pattern>/*</url-pattern>  
53     </filter-mapping>  
54   
55     <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->  
56     <filter>  
57         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  
58         <filter-class>  
59             org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>  
60     </filter>  
61     <filter-mapping>  
62         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  
63         <url-pattern>/*</url-pattern>  
64     </filter-mapping>  
65   
66     <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->  
67     <filter>  
68         <filter-name>CAS Assertion Thread Local Filter</filter-name>  
69         <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  
70     </filter>  
71     <filter-mapping> 
72         <filter-name>CAS Assertion Thread Local Filter</filter-name>  
73         <url-pattern>/*</url-pattern>  
74     </filter-mapping>  
75   
76     <!-- ======================== 单点登录结束 ======================== -->
 
 

配置完成后手动启动cas所属的tomcat,确认没有报错后,在eclipse部署两个web功能,然后eclipse里启动tomcat部署的两个项目。

博主建了两个简单的功能 工程名为:

 

启动完成后 网页输入项目任意一个项目的地址进行测试。

 

打开后都自动跳转到如下界面,打开另外一个项目也是如此。



登陆测试账号,验证通过后,就会返回到该项目的index页面。打开另一个项目也会跳转到对应的index页面。不会被拦截登陆。至此说明配置单点登陆成功。

5.配置数据库
目前使用的是默认账号登陆的的情况,但是要是连接到数据库又怎么办呢。下面cas服务器如何配置数据库。我使用的数据库是mysql
1. 打开cas服务器所属的tomcat 找到D:\apache-tomcat7\webapps\cas\WEB-INF\lib。加入几个依赖包(cas-server-support-jdbc-4.0.0.jar,commons-dbcp-1.4.jar,commons-pool-1.6.jar,mysql-connector-java-5.0.8-bin.jar)
其中cas-server-support-jdbc-4.0.0.jar可以在cas-server-4.0.0\modules目录下找到 其他的需要自行下载了。
2.打开D:\apache-tomcat7\webapps\cas\WEB-INF\deployerConfigContext.xml,找到如下默认的账号密码 注释掉。



然后新增:
 1 <bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
 2                 <property name="dataSource" ref="dataSource" />
 3                 <property name="sql" value="select password from ms_user where user_code=?" />
<!-- 上面这句写自己数据库sql -->
4 </bean>

5<!-- MySQL connector -->
 6 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
 7                    <property name="driverClassName">
 8                             <value>com.mysql.jdbc.Driver</value>
 9                    </property>
10                    <property name="url">
11                             <value>jdbc:mysql://localhost:3306/test</value>
12                    </property>
13                    <property name="username">
14                             <value>数据库账号</value>
15                    </property>
16                    <property name="password">
17                             <value>数据库密码</value>
18                    </property>
19 </bean>

修改完成后再重新启动cas服务端的tomcat服务器  cas登陆页面就需要登陆自己数据库的账号才能登陆了。

 

转载于:https://www.cnblogs.com/ButterFuture/p/4721787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值