搭建CAS单点登录的Demo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fancheng614/article/details/83867787

现在很多系统并不是单一的,而是几个系统可以共同运作,相辅相成,这时,如果让用户一个系统一个系统的登录再一个一个地注销,显然体验感是不好的。如此便有了单点登录,实现一次登录,可以访问所有相关系统,访问完之后只需要一次注销。

搜了比较多的资料,将单点登录的原理的很多,这里可以放一篇了解一下原理:https://www.cnblogs.com/gy19920604/p/6029210.html

本篇博客主要记录搭建单点系统的过程。源码下载

一、下载CAS

先下载一个CAS开源项目:https://www.apereo.org/projects/cas/download-cas

我目前下载的是3.5的。

二、搭建CAS中央服务器

1、将下载的CAS解压得到如下目录,注意打箭头的文件夹,我们将把这里面的项目导进eclipse。

2、新建一个web项目,将cas-server-3.5.0\cas-server-webapp\src\main\webapp目录下的文件放进新建项目的 WebContent目录下。

3、将\cas-server-3.5.0\cas-server-webapp\src\main\java下的org文件复制放到新建项目的src下。

4、解压1中图中的modules文件夹下面cas-server-webapp-3.5.0.war(即\cas-server-3.5.0\modules\cas-server-webapp-3.5.0.war)。将解压后的\modules\cas-server-webapp-3.5.0\WEB-INF\lib文件夹下面的jar拷贝到新建项目的lib目录下。

5、WEB-INF/deployerConfigContext.xml为了简单起见,我们不启用HTTPS,添加requireSecure为false:

扫描二维码关注公众号,回复: 4898884 查看本文章
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false" />

6、ticketGrantingTicketCookieGenerator.xml同样添加cookieSecure为false:

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

7、warnCookieGenerator.xml同样添加cookieSecure为false:

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

8、在cas.properties中可以修改server.name中的域名和端口号。

到此中央服务器搭建完成,启动后就可以看到登录界面如下图:

用户名和密码输入相同的就可以登录成功了,如test/test。

三、创建客户端项目CAS-web1

1、新建一个Maven项目,Maven项目的创建参照:https://blog.csdn.net/fancheng614/article/details/77712843

2、添加依赖jar

    <dependency>
	    <groupId>org.jasig.cas.client</groupId>
	    <artifactId>cas-client-core</artifactId>
	    <version>3.2.1</version>
	</dependency>
	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.16</version>
	</dependency>

3、修改项目的web.xml

注意<param-name>casServerLoginUrl</param-name>、<param-name>serverName</param-name>、<param-name>casServerUrlPrefix</param-name>、<param-name>serverName</param-name>下面对应的<param-value>的值。

  	<welcome-file-list>
  		<welcome-file>index.jsp</welcome-file>
  	</welcome-file-list>
	  <!-- ======================== start ======================== -->
	<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>http://127.0.0.1:8081/CAS/login</param-value>
	    </init-param>
	    <init-param>
	        <param-name>serverName</param-name>
	        <!-- 这里配置本系统的域名 -->
	        <param-value>http://127.0.0.1:8080/</param-value>
	    </init-param>
	</filter>
	<filter-mapping>
	    <filter-name>CAS Filter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
	<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>http://127.0.0.1:8081/CAS/</param-value>
	    </init-param>
	    <init-param>
	        <param-name>serverName</param-name>
	        <!-- 这里配置本系统的域名 -->
	        <param-value>http://127.0.0.1:8080</param-value>
	    </init-param>
	</filter>
	<filter-mapping>
	    <filter-name>CAS Validation Filter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
	<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>
	<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>
	<!-- ======================== end ======================== -->

致此,发布CAS-web1项目访问它的index.jap时会跳往CAS的登录界面,输入用户名和密码相同的值后会跳回CAS-web1的index.jsp页面。

四、实现CAS登录访问数据库用户表

此过程需要添加的jar:cas-server-support-jdbc-3.5.0.jar、ojdbc14.jar

1、在deployerConfigContext.xml文件中<property name="authenticationHandlers">标签下修改:

删除默认的验证方式:

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

然后添加数据库验证方式:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
	<property name="dataSource" ref="dataSource"></property>
	<property name="sql" value="select userpassword from tuser where username=?"> 
    </property>
	<property name="passwordEncoder" ref="md5PasswordEncoder"></property>
</bean>

2、在deployerConfigContext.xml文件中的<beans>标签下添加数据源,并配置加密方式

	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	   <property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
	   <property name="url"><value>jdbc:oracle:thin:@localhost:1521:ORCL</value></property>
	   <property name="username"><value>scott</value></property>
	   <property name="password"><value>scott</value></property>
	</bean>	
	
	<!-- 配置加密方式 ,自定义加密方式-->
	 <bean id="md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
         <constructor-arg index="0">
             <value>MD5</value>
        </constructor-arg>
    </bean>

到此完成数据库账户密码的验证!

猜你喜欢

转载自blog.csdn.net/fancheng614/article/details/83867787