cas sso搭建

前段时间因为业务需要,搭建了一个单点登录系统,中间也遇过好多坑,现在将搭建过程以及遇到的一些问题写出来,希望可以帮到大家。

使用keyTool创建数字证书

按提示输完信息后,在 输入<cas>的密钥口令时,最好将密码再输一遍,否则会报找不到文件异常

将证书导出到文件

将证书导入jdk,输入jdk安装目录

出现以下错误


密码输入:change it解决

ps:该命令中输入的密码和上面输入的不是同一个密码;如果是多台机器演示,需要在每一台客户端导入该证书
应用证书到web服务器
打开tomcat目录的conf/server.xml文件,设置如下:




一般是端口被占用

下载cas部署服务端
cas-server-webapp-4.2.7.war文件,把改文件copy到 e:\cas\tomcat-cas\webapps\ 目下,并重命名为:cas.war.
启动tomcat-cas,在浏览器地址栏输入:https://demo.micmiu.com:8443/cas/login ,回车

输入默认用户名和密码casuser:Mellon

部署cas-client
以cas-client-core-3.2.1.jar
借以tomcat默认自带的 webapps\examples 作为演示的简单web项目
安装配置 tomcat-app1
解压apache-tomcat-8.0.1.tar.gz并重命名后的路径为 e:\cas\tomcat-app1,修改tomcat的启动端口,在文件conf/server.xml文件找到如下内容:

修改为如下,防止端口冲突

启动tomcat-app1

上述界面表示tomcat-app1的基本安装配置已经成功。
接下来复制 client的lib包cas-client-core-3.2.1.jar到 tomcat-app1\webapps\examples\WEB-INF\lib\目录下, 在tomcat-app1\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://demo.micmiu.com:8443/cas/login</param-value>
			</init-param>
			<init-param>
				<param-name>serverName</param-name>
				<param-value>http://app1.micmiu.com:18080</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.Cas20ProxyReceivingTicketValidationFilter</filter-class>
			<init-param>
				<param-name>casServerUrlPrefix</param-name>
				<param-value>https://demo.micmiu.com:8443/cas</param-value>
			</init-param>
			<init-param>
				<param-name>serverName</param-name>
				<param-value>http://app1.micmiu.com:18080</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>
 
		<!-- ========================配置结束======================== -->
同理配置tomcat-app2
注意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://demo.micmiu.com:8443/cas/login</param-value>
			</init-param>
			<init-param>
				<param-name>serverName</param-name>
				<param-value>http://app2.micmiu.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.Cas20ProxyReceivingTicketValidationFilter</filter-class>
			<init-param>
				<param-name>casServerUrlPrefix</param-name>
				<param-value>https://demo.micmiu.com:8443/cas</param-value>
			</init-param>
			<init-param>
				<param-name>serverName</param-name>
				<param-value>http://app2.micmiu.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>
 
		<!-- ======================== 配置结束 ======================== -->
配置结束后,启动三个tomcat,发现当启动第二个的时候出错,查看日志发现以下异常,原因是同一台机器不能启动多个具有相同shutdown端口的tomcat。修改一下shutdown的端口号就可以了。

修改app1和app2的shutdown端口号



配置完成后又出现,输入之前的请求,两个应用都会出现404的错误

我这个情况解决方法是,导入的jar版本不一致所致,检查你导入的jar是否正确,我是导入的cas-client-core-3.4.1.jar,而项目中配置的是cas-client-core-3.2.1.jar

涉及cas-server端的访问都用https协议,而客户端项目的访问则是通常使用的http。这样有一个问题,那就是需要让cas-server端允许使用http的客户端来请求相关的服务,找到cas工程下的HTTPSandIMAPS-10000001.json文件,该文件在服务端的\WEB-INF\classes\services目录内增加http

增加http也可以发送请求,如下

更多可以参考以下文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值