您的位置:首页 > 其它

cas实现单点登录

2015-12-31 13:19 387 查看
添加虚拟域名: 可以添加多个虚拟域名

windows下修改文件:

C:\Windows\System32\drivers\etc\hosts


添加内容如下:
127.0.0.1  www.caohaibing.com

生成证书

我的机器名称为“www.caohaibing.com”,我就把它作为我的host,那么对应的证书应该这样创建。

keytool -genkey -keyalg RSA -alias casfortest -dname "cn=www.caohaibing.com" -storepass <span style="background-color: rgb(255, 255, 51);">changeit</span>


其中 casfortest 为别名, changeit 为密码(即密钥库口令);

该语句是对我们之前介绍的 keytool -genkey -alias casfortest -keyalg RSA 的精写,它已经通过相应的参数指定了对应的参数值,而不需要再与用户交互了。如果还用之前的语句生成证书的话,那么对应的值应该这样填: 姓 和 名字 都填 www.caohaibing.com

之后会在用户的对应目录下(这里目录是 C:\Users\aaa)生成一个.keystore文件。之后需要将该文件导出为一个证书到%JAVA_HOME%/jre/lib/security目录下,对应指令为:

keytool -export -alias casfortest -file %JAVA_HOME%/jre/lib/security/casfortest.crt -storepass changeit


之后需要将导出的casfortest.crt证书添加到运行时使用的JRE的受信任证书库中,此时如果出现异常可将原本%JAVA_HOME%/jre/lib/security目录下的cacerts删除后继续执行以下指令。

keytool -import -alias casfortest -file %JAVA_HOME%/jre/lib/security/casfortest.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit


配置CAS 服务器端

Cas应用都需要有一个Cas Server。Cas Server是基于Java Servlet实现的,其要求部署在Servlet2.4以上版本的Web容器中。在此笔者将其部署到tomcat7中。Cas Server是要求使用https协议进行访问的,所以如果你的Web容器没有开启https通道,则需先开启。

参考博文:http://haohaoxuexi.iteye.com/blog/2128732

1.1 开启tomcat7的https通道

打开tomcat安装目录conf/server.xml文件,将如下语句的注释打开,并加上属性keystorePass,密码为我们在建立keystore时设立的密码。这样我们就可以使用https来访问tomcat了。默认其会到${user.home}/.keystore寻找keystore文件,我们之前建立的keystore文件默认就在这个位置。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="changeit"/>
如果更改过生成证书的位置:参考博文 http://blog.csdn.net/small_love/article/details/6664831

1.2 部署Cas Server

从官网下载的cas server中会含有一个cas server对应的war包,对应路径为cas-server-3.5.2\modules\cas-server-webapp-3.5.2.war,我们可以把该war包重命名为cas.war,然后丢到tomcat的webapps目录下。之后我们就可以启动tomcat,然后访问https://localhost:8443/cas/login就可以看到Cas的登录页面了。

1.3 更改认证方式 http://blog.csdn.net/cenguocheng/article/details/12185815

http://blog.csdn.net/chbsrzf/article/details/50434560

http://haohaoxuexi.iteye.com/blog/2128869

http://haohaoxuexi.iteye.com/blog/2142616
CAS默认的认证方式是 用户名和密码一样。要更改为从数据库中查询。需要配置数据源 dataSource,参考以上博文。

建立使用Cas进行单点登录的应用

参考博文:http://haohaoxuexi.iteye.com/blog/2142631

新建普通的maven web-app项目,CasClientA,CasClientB,将index.jsp页面的欢迎显示更改一下。再lib目录中加入jar: cas-client-core-3.2.1.jar (直接在maven加依赖,一直加载不了这个包); CasClientA和CasClientB项目更改相同

pom.xml中加依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.caohaibing</groupId>
<artifactId>CasClientA</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>CasClientA Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.2-b01</version>
</dependency>

<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>CasClientA</finalName>
</build>
</project>
web.xml文件更改为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<context-param>
<param-name>serverName</param-name>
<param-value>http://www.caohaibing.com:8080</param-value>
</context-param>

<filter>
<filter-name>casAuthenticationFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://www.caohaibing.com:8443/cas/login</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>casAuthenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>casTicketValidationFilter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://www.caohaibing.com:8443/cas</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>casTicketValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>casHttpServletRequestWrapperFilter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>casHttpServletRequestWrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>casAssertionThreadLocalFilter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>casAssertionThreadLocalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<display-name>Client A</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


将 CasClientA 和 CasClientB 打成 war 包,放入 tomcat 的webapp目录下;

1. 在cmd进入对应的项目路径

2. mvn clean package -DskipTests -Pdev 生成对应的WAR包,在项目的target目录下,名字

测试Cas单点登录的部署:

tomcat的bin目录下运行 startup.bat 启动tomcat,

访问客户端CasClientA: www.caohaibing.com:8080/CasClientA

页面会自动跳转到 Cas Server 的登录页面:https://www.caohaibing.com:8443/cas/login?service=http%3A%2F%2Fwww.caohaibing.com%3A8080%2FCasClientA%2F

输入用户名密码,根数据库表中的信息匹配:登录成功会重新跳转到CasClientA的index.jsp页面:

测试访问CasClientB项目: http://www.caohaibing.com:8080/CasClientB/
不再需要转到 Cas Server 的登录页面了;;

注意:
在服务器端生成证书事如果密码用的不是 changit 时, 因为添加到运行时使用的JRE的受信任证书库中的密码 默认为 changeit , 这里的密码需要更改,不然会出现证书之类的错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: