您的位置:首页 > 其它

基于CAS实现单点登入

2015-08-11 17:07 288 查看
一、生成密钥

在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
>
[align=left] [/align]

<!-- CAS Server 通知 CAS Client,删除session,注销登录信息
youcb 20141117 -->

<filter
>

<filter-name
>CAS Single Sign Out Filter
</filter-name
>

<filter-class
>
[align=left] org.jasig.cas.client.session.SingleSignOutFilter [/align]

</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
>
[align=left] [/align]

<filter-mapping
>

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

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

</filter-mapping
>
[align=left] [/align]

<filter-mapping
>

<filter-name
>CAS HttpServletRequest Wrapper Filter</filter-name>

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

</filter-mapping
>

<!-- 单点登入END -->

[align=left]客户端可通过以下获取返回信息[/align]
Assertion assertion = AssertionHolder.getAssertion();

AttributePrincipal ap = assertion.getPrincipal();
String name = ap.getName();
或者
Principal principal = httpRequest.getUserPrincipal();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: