cas搭建sso单点登陆

    xiaoxiao2021-03-26  36

    多的话我就不说了,概念什么的自己百度,直接上操作步骤:

    一:cas是基于https的所以我们需要的就是证书啦:

    1.cmd窗口输入:

    keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass caiwenhao -validity 365 -keystore e:\menco.keystore -storepass caiwenhao

    说明:注意一下这里的您的名字与姓氏这里,将用于域名访问

    2.cmd导出证书:(-alias xxx 名字与上面生成证书的名字一致ssodemo)

    keytool -export -alias ssodemo -keystore e:\menco.keystore -file e:\ssodemo. crt -storepass caiwenhao 3.cmd安装客户端证书:(进入jdk的D:\jdk\jdk-7\jre\lib\security目录)

    keytool -import -alias ssodemo -keystore cacerts -file e:\ssodemo.crt

    说明:秘钥你敲入changeit就行了,这是java中cacerts证书库的默认密码

    二:cas服务以及客户端

    1.修改host文件:添加域名

    127.0.0.1 casserver.cwh.com 127.0.0.1 client.cwh.com 127.0.0.1 client.cwh.com说明:这里的casserver.cwh.com对应的就是生成证书是你的名字与姓氏

    2.应用3个tomcat,一个作为cas服务,另两个为客户端:

    3.修改客户端端口,以免端口冲突:

    说明:同样也把另一台client2端口前面加2做修改

    4.cas服务启用https协议:(把下面的代码注释放开,添加keystoreFile="e:/menco.keystore" keystorePass="caiwenhao")

    启动casserver检验ssl是否生效:

    说明:我用的是chrom浏览器,会出现证书无效之类的,点击高级展开继续访问就可以了 5.下载cas-server-3.5.2获取cas-server-webapp-3.5.2.war放入D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps改名:cas-server.war

    启动casserver;访问cas  https://casserver.cwh.com:8443/cas-server:

    登录cas默认用户密码随便,主要用户和密码一致就可以了:

    注销地址为https://casserver.cwh.com:8443/cas-server/logout:

    三:cas连接数据库

    打开D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps\cas-server\WEB-INF\deployerConfigContext.xml文件

    1.注销掉以下配置:

    <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> 2.引入所需jar包到D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps\cas-server\WEB-INF\lib:

    3.deployerConfigContext.xml添加datesource:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sso"/> <property name="user" value="root"/> <property name="password" value=""/> </bean>4.在authenticationHandlers  的list里面也就是我们注销掉配置的那段下面添加以下配置:

    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="dataSource" /> <property name="sql" value="select password from sec_user where account = ?" /> </bean>说明:数据库和建表我就不说了 ok这样我们访问cas的时候原来的用户密码相同将不起作用,登录用我们数据库里面的数据就可以啦

    四:客户端启用sso单点登陆

    1.我们先启动我们client的tomcat,先访问下客户端是否没问题先

    直接访问tomcat自带的一个examples例子就好了:http://client.cwh.com:28080/examples/servlets/servlet/HelloWorldExample

    这样的话出现helloworld,那就没问题了

    2.打开客户端examples这个例子的web.xml:D:\tomcat\apache-tomcat-8.0.26 - client1\webapps\examples\WEB-INF\web.xml:

    在尾部添加以下代码:

    <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置--> <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>CAS Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://casserver.cwh.com:8443/cas-server/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client.cwh.com:28080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://casserver.cwh.com:8443/cas-server</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client.cwh.com:28080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责实现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 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>

    说明:同样另一个客户端也跟着改,注意一下里面配置的端口

    3.添加客户端所需jar包:

    4.启动客户端client1和client2,

    访问client1:http://client.cwh.com:18080/examples/servlets/servlet/HelloWorldExample

    或访问client2:http://client.cwh.com:28080/examples/servlets/servlet/HelloWorldExample

    页面将会被重定向到cas登录界面并且url会变成例如这个样子:

    https://casserver.cwh.com:8443/cas-server/login?service=http://client.cwh.com:28080/examples/servlets/servlet/HelloWorldExample然后我们输入登录后将访问到helloword;另一个客户端访问则不需要重新登录直接跳转到helloword

    至此我们利用cas实现sso单点登陆就完成了!

    转载请注明原文地址: https://ju.6miu.com/read-663980.html

    最新回复(0)