基于CAS实现单点登入

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lzxadsl/article/details/47423351
一、生成密钥
在D:/keys目录打开cmd,输入命令:
keytool -genkey -alias  test_auth -keyalg RSA -keystore D:/keys/caskey.keystore
密钥名称:caskey 别名:test_auth 密码:asdfgh


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


二、导出服务端证书
命令:
     keytool -export -file d:/keys/test_auth.crt -alias test_auth -keystore d:/keys/caskey.keystore

导出的证书名称:test_auth.crt,caskey为上一步生成的密钥名称




三、把证书导入到客户端JDK的cacerts证书库中(客户端tomcate一定要引用该jdk)
     如果不再同一台电脑上,把服务端证书拷贝到客户端电脑上在进行操作

1、进入到" D:\Program Files\Java\jdk1.7.0_75\jre\lib\security "此目录,将cacerts删除

2、运行-->cmd-->输入   

keytool -import -keystore "D:\Program Files\Java\jdk1.7.0_75\jre\lib\security\cacerts" -storepass asdfgh -keypass asdfgh -file d:\keys\test_auth.crt

storepass 生成密钥时第一次输入的口令 keypass 生成密钥时第二次输入的口令



3、输入y 即可。

注意:D:\Program Files\Java\jdk1.7.0_75\jre\lib\security 为客户端tomcate所引用的jdk路径,安装JDK是有两个jre目录,一个在jdk底下,一个是独立的jre


在服务端tomcate service.xml中开启https
<!--开启了此处证书 keystoreFile生成的证书的位置 keystorePass设置的密码-->
   <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
                  keystoreFile="D:/keys/caskey.keystore"
                  keystorePass="asdfgh" />
4、请把web.xml中的serverName改成自己的IP地址

注:"f:\sso\test_auth.crt"为证书文件所在路径,test_auth.acr 为 测试证书
遇到问题
1、配置完仍然无法使用?
请关闭浏览器,重新打开浏览器

2、后台出现异常



请确认你刚才导入证书的JDK是你现在 Tomcat运行所使用的JDK





3、javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching xxx.xxx.xx found
检查web.xml中的配置
   <init-param>
         <param-name>casServerLoginUrl</param-name>
         <param-value>https://sso.gevin.me:8443/cas/login</param-value>
     </init-param>
确保其中的sso.gevin.me跟生成证书时第一个问填写的域名是一致的。如图:



客户端基于spring wen.xml配置
所需包

     <context-param >
        <param-name >serverName </param-name >
        <param-value >http://127.0.0.1:8080/ </param-value >
    </context-param >
    <context-param >
        <param-name >casServerUrl </param-name >
        <param-value >https://cas.service.com:8443/ </param-value >
    </context-param >
   
    <!-- CAS Server 通知 CAS Client,删除session,注销登录信息  youcb 20141117 --> 
   <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 >
   <listener >
        <listener-class> org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class >
  </ listener>  
  < 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://cas.service.com:8443/cas-service/login</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://cas.service.com:8443/cas-service</param-value >
    </init-param >
    <init-param > 
       <param-name >redirectAfterValidation </param-name > 
       <param-value >true </param-value > 
    </init-param >
    <init-param > 
        <param-name >encoding </param-name > 
        <param-value >UTF-8 </param-value > 
    </init-param >
  </ filter>
  <!-- 该过滤器负责实现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 Authentication Filter </filter-name >
        <url-pattern >/loginPage.htm </url-pattern >
    </filter-mapping >
    
    <filter-mapping >
        <filter-name >CAS Validation 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 >
    <!-- 单点登入END -->
客户端可通过以下获取返回信息
Assertion assertion = AssertionHolder.getAssertion();
AttributePrincipal ap =  assertion.getPrincipal();
String name = ap.getName();
或者
Principal principal = httpRequest.getUserPrincipal();
展开阅读全文

没有更多推荐了,返回首页