基于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();
在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();
相关文章推荐
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- IntelliJ IDEA 14 注册码
- Qt 5.3 下OpenCV 2.4.11 开发(15)滤波函数
- compass制作sprite雪碧图
- 数据库基础
- IOS第八天(6:UITableViewController新浪微博, 模型和 控件位置封装一起statusFrame)
- Ubuntu下编译运行Kamailio
- Cocos2d-x中,在过渡场景异步加载图片和声音
- 最美应用-从Android研发工程师的角度之[最美时光]
- RTP-RTCP协议分析
- android媒体--图库与API层MediaPlayer的交互
- 关于环信即时通信的使用小结
- 高级查询与索引
- [Linux]查看系统信息方法汇总
- JAVA,Play framework 入门,打印hello word
- 欢迎使用CSDN-markdown编辑器
- 安慰奶牛 解题报告
- Android开发者必知的5个开源库
- 按Home按键退出应用后重新启动该应用无法返回到最后打开页面的解决方案
- MySQL Study之--Percona Server版本