现在的位置: 首页 > 综合 > 正文

CAS单点登录

2018年01月20日 ⁄ 综合 ⁄ 共 4309字 ⁄ 字号 评论关闭

最近有兴趣搭建了一下CAS SSO单点登录环境。

cas服务端:cas-server-3.3.3-release.zip 下载地址:http://downloads.jasig.org/cas/cas-server-3.3.3-release.zip
cas客户端:cas-client-3.1.8-release.zip 下载地址:http://downloads.jasig.org/cas-clients/cas-client-3.1.8-release.zip
cas java客户端:cas-client-2.0.11.zip 下载地址:http://downloads.jasig.org/cas-clients/cas-client-2.0.11.zip

一、服务端的配置。

首先我先开始按照网上的教程配置https验证,

http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html

带有域名的验证始终不成功,我所以就取消的https验证。

CAS取消https验证。先把cas-server-3.3.3-release.zip解压 
modules文件夹下找到
cas-server-webapp-3.3.3.war 放到一个tomcat下,启动tomcat,将自动解压缩war包,将项目文件夹名改为cas。

服务器端:

1.找到cas-servlet.xml,将 p:cookieSecure="true"
改为 p:cookieSecure="false" 如下:

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="false"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />

2.找到cas-servlet.xml,将 p:cookieSecure="改为 p:cookieSecure="false",改完如下:

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="false"
        p:cookieMaxAge="-1"
        p:cookieName="CASPRIVACY"
        p:cookiePath="/cas" />

3.找到deployerConfigContext.xml,在文件中找到“HttpBasedServiceCredentialsAuthenticationHandlerbean,然后添加:p:requireSecure="false",改完如下:

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
                    p:httpClient-ref="httpClient" p:requireSecure="false" />

Tomcat可以不添加8443端口。

启动tomcat,用浏览器浏览 http://locahost:8080/cas。

出现

输入用户名:admin,密码:admin ,如果出现成功界面,说明cas服务器搭建成功,默认是用户名密码相同就是就登录成功。当然这只是简单验证,怎么进行数据库数据验证呢。

请参看上面的链接,讲的比较详细。记得往cas的lib里面添加相应的jdbc jar包 和cas-server-support-jdbc.jar。

二.客户端

把casclient.jar复制到工程TestPro  /WEB-INF/lib下面。

web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


	<filter>
	    <filter-name>CAS Filter</filter-name>
	    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
	    <init-param>
	      	<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
	      	<param-value>http://localhost:8080/cas/login</param-value>
	    </init-param>
	    <init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
			<param-value>http://localhost:8080/cas/serviceValidate</param-value>
	    </init-param>
	    <init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
			<param-value>10.11.68.54:8080</param-value>
		</init-param>
	</filter>
	<filter-mapping>
	    <filter-name>CAS Filter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<servlet>
		<servlet-name>welcome</servlet-name>
		<servlet-class>welcome.WelcomePage</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>welcome</servlet-name>
		<url-pattern>/WelcomePage</url-pattern>
	</servlet-mapping>
</web-app>

在src下面 welcome包里面WelcomePage.java

package welcome;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import edu.yale.its.tp.cas.client.filter.CASFilter;
import edu.yale.its.tp.cas.client.filter.CASFilterRequestWrapper;

public class WelcomePage extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6604894282088992512L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Welcome to casTest2 sample System!</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>Welcome to casTest1 sample System!</h1>");
		CASFilterRequestWrapper reqWrapper = new CASFilterRequestWrapper(request);
		out.println("<p>The logon user:" + reqWrapper.getRemoteUser() + "</p>");
		HttpSession session = request.getSession();
		out.println("<p>The logon user:" + session.getAttribute(CASFilter.CAS_FILTER_USER) + "</p>");
		out.println("<p>The logon user:" + session.getAttribute("edu.yale.its.tp.cas.client.filter.user") + "</p>");
		out.println("</body>");
		out.println("</html>");
	}
}

然后启动tomcat,在浏览中输入

http://localhost:8080/testPro/WelcomePage

你可以可以观看整个流程。

总结:该流程主要是非https验证的,个人感觉这么比较方便,https验证出了些问题,没有解决,主要是用域名输入显示不了,用localhost能显示,而我在系统hosts文件中已经加入了域名,并且多次尝试了证书认证还是不行。所以纠结了很久。

抱歉!评论已关闭.