单点登录CAS解决方案<二>:数据库验证

 「个人学习记录,肯定有理解错误和理解不透的地方,小白总是有个成长的过程,希望大家多多指教。」

    书接上文:单点登录CAS解决方案<一>:纯净CAS-Server ,本文主要讲解的是将原来的默认验证方式修改为MySql数据表验证,这也是很常用的需求,不多废话。下面先推荐几个链接:

CAS-Server官方文档:http://jasig.github.io/cas/4.0.x/index.html

CAS各版本源码(包含了其他一些服务开源的项目):https://github.com/Jasig

一、依赖包

1、依赖包下载:

    cas-server-support-jdbc-4.0.3.jar,druid-1.0.15.jar,mysql-connector-java-5.1.36.jar。这些包的下载,我想从上文的教程中应该得到了经验,那就是直接在Maven库中下载,再给最后一个例子,以后就直接说依赖包,自行去Maven库中下载。


直接将上面的下载的三个.jar包放到“WebContent/WEB-INF/lib”目录下。


二、配置

1、连接池配置

    知道alibaba的温少的,看到上面的druid-1.0.15.jar包就应该感觉到很亲切,这是一个很强大的JDBC数据库连接池,使用相当简单方便。直接上干货。

  • web.xml文件配置,直接在web.xml文件下添加下面内容
<!-- Druid连接池 -->
	<filter>
		<filter-name>DruidWebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>DruidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
  • deplayerConfigContext.xml,在该文件中添加如下内容



<!-- Define the DB Connection -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
	init-method="init" destroy-method="close">
	<!-- 数据库基本信息配置 -->
	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<!-- 数据库ip,端口,数据库名…… -->
	<property name="url" value="jdbc:mysql://127.0.0.1:3306/sso?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
	<!-- 数据库用户名 -->
	<property name="username" value="root" />
	<!-- 数据库密码 -->
	<property name="password" value="123456" />        
	<!-- 初始化连接数量 -->
	<property name="initialSize" value="5" />
	<!-- 最大并发连接数 -->
	<property name="maxActive" value="10" />
	<!-- 最小空闲连接数 -->
	<property name="minIdle" value="3" />
	<!-- 配置获取连接等待超时的时间 -->     
	<property name="maxWait" value="20000" />
	<!-- 超过时间限制是否回收 -->
	<property name="removeAbandoned" value="true" />
	<!-- 超过时间限制多长; -->
	<property name="removeAbandonedTimeout" value="180" />
	<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
	<property name="timeBetweenEvictionRunsMillis" value="60000" />
	<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
	<property name="minEvictableIdleTimeMillis" value="300000" />
	<!-- 用来检测连接是否有效的sql,要求是一个查询语句-->
	<property name="validationQuery" value="SELECT 1 FROM mysql" />
	<!-- 申请连接的时候检测 -->
	<property name="testWhileIdle" value="true" />
	<!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
	<property name="testOnBorrow" value="false" />
	<!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能  -->
	<property name="testOnReturn" value="false" />
	<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
	<property name="poolPreparedStatements" value="true" />     
	<property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
	<!--属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:                 
				监控统计用的filter:stat
				日志用的filter:log4j
			   防御SQL注入的filter:wall -->
	<property name="filters" value="stat" />       
</bean>


  • deplayerConfigContext.xml,删除该文件下的:



<bean id="primaryAuthenticationHandler"
          class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
    </bean>


  • deplayerConfigContext.xml,在该文件下添加:



<!-- 密码加密规则,这个规则可自定义,以后会在博客中记录 -->
<bean id="passwordEncoder"
      class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
      c:encodingAlgorithm="MD5"
      p:characterEncoding="UTF-8" />
	  
<!-- 用户验证Handler -->    
<bean id="dbAuthHandler"
	  <!-- CAS与数据库之间的适配器,这个地方可以自定义,以后会在博客中记录 -->
	  class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
	  <!-- 上文中的数据库连接池对象 --> 
	  p:dataSource-ref="dataSource"
	  <!-- 密码加密规则对象 --> 
	  p:passwordEncoder-ref="passwordEncoder"
	  <!-- 数据库中的用户表 --> 
	  p:tableUsers="sso_users
	  <!-- 用户表中的用户名字段 --> 
	  p:fieldUser="username"
	  <!-- 用户表中的密码字段 --> 
	  p:fieldPassword="password" />
  • deplayerConfigContext.xml,修改该文件的下面内容:



<constructor-arg>
            <map>
                <!--
                   | IMPORTANT
                   | Every handler requires a unique name.
                   | If more than one instance of the same handler class is configured, you must explicitly
                   | set its name to something other than its default name (typically the simple class name).
                   -->
                <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
                <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
            </map>
        </constructor-arg>

        改为:(其实就是把primaryAuthenticationHandler修改为上面自定义的dbAuthHandler)

<constructor-arg>
	<map>
		<!--
		   | IMPORTANT
		   | Every handler requires a unique name.
		   | If more than one instance of the same handler class is configured, you must explicitly
		   | set its name to something other than its default name (typically the simple class name).
		   -->
		<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
		<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" />
	</map>
</constructor-arg>



三、创建数据库

    这里,mysql安装就不用说了吧,创建下面的表,注意这个“表名”和上面数据库连接池设置的要一样啊。再就是表中的username,和password字段也要和上面的配置一样。

CREATE TABLE `sso` (
  `id` int(13) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL,
  `nick` varchar(20) DEFAULT NULL,
  `sex` tinyint(1) NOT NULL DEFAULT '1',
  `email` varchar(50) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `createtime` int(13) DEFAULT NULL,
  `modifytime` int(13) DEFAULT NULL,
  PRIMARY KEY (`id`,`username`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8



添加测试数据咯,记得上面用的 密码加密规则是MD5加密的,嫌麻烦的直接用我的添加一条测试记录
insert  into `sso_users`(`id`,`username`,`password`,`nick`,`sex`,`email`,`phone`,`createtime`,`modifytime`) values (1,'liucao','a8a2a67a027289ba5dda5b651980b995','Mr.Liucao',1,'694065513@qq.com','15080071987',2147483647,2147483647);



四、运行

    打开页面后直接输入用户名:liucao  密码:liucao

    是否如愿以偿呢?

转载于:https://my.oschina.net/liucao/blog/479681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值