单点登录技术总结

参考文章

1、http://blog.csdn.net/chenhai201/article/details/50623395

2、http://blog.csdn.net/diyagea/article/details/50639911

3、http://www.cnblogs.com/lr393993507/p/5231432.html

4、http://www.cnblogs.com/notDog/p/5276638.html


1、前期准备

 tomcat ,jdk,cas服务端,cas客户端

2、生成证书  (重新生成需要把以前的都删掉)

keytool -genkey -alias  lovez -keyalg RSA -keystore D:/keys/lovez ( 在这里定义了别名 lovez,下面会用到,前后一致,否则报错)

下面的姓氏要注意,是你的域名,

否则报错

java.security.cert.CertificateException: No name match


这里注意一下 "-alias"后边的第一个"colorb",这里只是一个别名,最后一个"colorb",指的是keysotre的名称。

其中名字与姓氏这一最好写你的 域名,如果在单击测试你可以在文件中映射一个虚拟域名


3、导出证书

继续小黑窗,keytool -export -file d:/keys/colorb.crt -alias colorb -keystore d:/keys/lovez(此处的别名上面定义的)


4、把证书导入到客户端jdk


依旧是小黑窗,输入keytool -import -keystore D:\Program Files\Java\jdk1.7.0_13\jre\lib\security\cacerts -file D:/keys/colorb.crt -alias colorb

上面方式报错

网上解决方案:再用cd进入到C:\jdk1.5\jre\lib\security这个目录下

    敲入如下命令回车执行

keytool -import -alias cacerts -keystore cacerts  -file D:/keys/colorb.crt -alias lovez(如果security存在cacerts删掉,否则报错,)


5、安装服务端

1、部署war

我们把下载下来的CAS Service解压后,到cas-server-3.3\modules目录,找到cas-server-webapp-3.3.war,把war包放到tomcat%TOMCAT_HOME% \webapps下,当然,你最好改个名字,改啥都行,简单就好。

2、修改server.xml

接下来我们就要使用刚才生成的证书了,找到%TOMCAT_HOME%\conf\server.xml这个文件,打开并编辑之:

如果你的这个文件没改过的话,大概在80几行会找到以下注释

 <!--

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

    -->

我们把它修改一下,换下

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  

               maxThreads="150" scheme="https" secure="true"  

               clientAuth="false" sslProtocol="TLS"   

               keystoreFile="D:/keys/colorb" truststoreFile="C:/Program Files/Java/jdk1.6.0_30/jre/lib/security/cacerts"

               keystorePass="zw"/>

keystoreFile就是刚才生成的keystore文件

truststoreFile就是书嘛,刚才已经安装到jre

keystorePass密码

 

3、访问服务端

好了,配置好了之后,可以访问http://lovez:8443/cas ,注意cas就是刚才刚的那个war包名字。



账号密码在配置文件




配置客户端

1、添加依赖

解压刚才下好的CAS Client包,里面会有cas-client-core-x.x.x.jar,不过还需要commons-logging-1.1.jarservlet-api-2.3.jar,如果你觉得麻烦,直接用maven添加依赖吧,我就是那么做的:

<dependency>  

    <groupId>org.jasig.cas.client</groupId>  

    <artifactId>cas-client-core</artifactId>  

    <version>3.1.12</version>  

</dependency>

2、配置web.xml

接下来就是要配置web.xml啦,主要是配置过滤器。

<web-app>

   <display-name>CAS Web Application Demo</display-name>

   <!-- ======================== 单点登录开始 ======================== -->

<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->

<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://colorb:8443/cas/login</param-value>

<!--这里的server是服务端的IPcolorb其实最好是一个域名-->

</init-param>

<init-param>

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

<param-value>http://colorb:8888</param-value><!--下边为啥也是colorb呢,其实是因为我都是我懒得设置其它名称而已,下边会用到color2这个名称-- >

</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://colorb:8443/cas</param-value>

</init-param>

<init-param>

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

<param-value>http://colorb:8888</param-value>

</init-param>

</filter>

<filter-mapping>

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

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

</filter-mapping>

 

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

 

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

</web-app>

 

好了,第一个客户端配置好了,接下来以同样的方式,配置第二个客户端,不过web.xml稍微有一点点不同的就是上边标的地址里的color换成color2,其实就是代表两个不同的域名嘛。注意上边标的地址,它们都是指向同一个地址,即CAS服务端的地址,因为客户端访问的服务器是同一个的。

按如上配置,一般就成功了,如果你访问出错的话,证明你的客户端web.xml没有配置好,或者你的证书生成有问题,多加注意就好,我也错了不少次!

我配置的简单版

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <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>https://lovez:8443/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://lovez:8080/client</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>https://lovez:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://lovez:8080/client</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-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Authentication 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>

    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>


最后测试

输入域名

http://lovez:8080/client/index.jsp

会跳到服务端登录界面

输入账号密码回到客户端。

登录成功图


参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值