zoukankan      html  css  js  c++  java
  • CAS单点登录之支持数据库认证

    本博客介绍一下基于CAS4.2.7的配置,之前博客CAS4.2.7服务端配置已经介绍了怎么部署CAS服务端,不过在登录机制是用固定的账号密码登录,实际项目肯定不可以这样做,所以本博客怎么配置CAS服务端直接JDBC方式登录,具体的服务端配置参考:CAS4.2.7服务端配置

    一、数据库设计

    建数据库,加用户信息表:

    DROP TABLE IF EXISTS `sys_user`;
    
    CREATE TABLE `sys_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户Id',
      `username` varchar(100) NOT NULL COMMENT '用户名',
      `password` varchar(100) NOT NULL COMMENT '密码',
      `phone` varchar(11) DEFAULT NULL COMMENT '手机',
      `sex` varchar(6) DEFAULT NULL COMMENT '性别',
      `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
      `mark` varchar(100) DEFAULT NULL COMMENT '备注',
      `rank` varchar(10) DEFAULT NULL COMMENT '账号等级',
      `lastLogin` date DEFAULT NULL COMMENT '最后一次登录时间',
      `loginIp` varchar(30) DEFAULT NULL COMMENT '登录ip',
      `imageUrl` varchar(100) DEFAULT NULL COMMENT '头像图片路径',
      `regTime` date NOT NULL COMMENT '注册时间',
      `locked` tinyint(1) DEFAULT NULL COMMENT '账号是否被锁定',
      `rights` varchar(100) DEFAULT NULL COMMENT '权限(没有使用)',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_u_1` (`username`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    

    二、CAS配置部署

    在CAS.war里找到WEB-INF下面的cas.properties,这是cas的配置文件,可以自己加上一些配置:

    ##
    # Datasource config
     platform.jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/jeeplatform?autoReconnect=true&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
     platform.jdbc.username=root
     platform.jdbc.password=root
     platform.jdbc.publickey=HHwwDSJKoZIhvcNAQEBBQADSwAwSAJBAKZijIzzXp1dyksL1ZSejBmuVz1Y0vgiQVbcQ/13p4pwHRo8gU3pd6YaWutOlBTEWvHBbnGxIdnrhxnQZGwU1O0CAwEAAQ==
     platform.jdbc.initialSize=10
     platform.jdbc.minIdle=10
     platform.jdbc.maxActive=50
    

    同样在WEB-INF的developerConfigContext.xml里,加上数据库DataSource的配置,这里用了阿里的druid,所以需要往lib文件夹里丢一下druid的相关jar

    
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
            <property name="url" value="${platform.jdbc.jdbcUrl}"/>
            <property name="username" value="${platform.jdbc.username}"/>
            <property name="password" value="${platform.jdbc.password}"/>
            <property name="initialSize" value="${platform.jdbc.initialSize}"/>
            <property name="minIdle" value="${platform.jdbc.minIdle}"/>
            <property name="maxActive" value="${platform.jdbc.maxActive}"/>
            <property name="maxWait" value="60000"/>
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="60000"/>
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="300000"/>
            <property name="validationQuery" value="SELECT 1"/>
            <property name="testWhileIdle" value="true"/>
            <property name="testOnBorrow" value="false"/>
            <property name="testOnReturn" value="false"/>
            <!-- 打开removeAbandoned功能 -->
            <property name="removeAbandoned" value="true"/>
            <property name="removeAbandonedTimeout" value="1800"/>
            <!-- 1800秒,也就是30分钟 -->
            <property name="logAbandoned" value="true"/>
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小,mysql 不使用 -->
            <property name="poolPreparedStatements" value="false"/>
            <property name="filters" value="config" />
            <!--<property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${platform.jdbc.publickey};druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true"/>-->
        </bean>
    

    同样在WEB-INF的developerConfigContext.xml里配置一下数据库认证控制器:

    <!-- 认证控制器 -->
        <bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
            <!--<property name="passwordEncoder" ref="passwordEncoder" />-->
            <property name="dataSource" ref="dataSource" />
            <!-- 通过用户名查询密码的SQL -->
            <property name="sql" value="select password from sys_user where username =?" />
        </bean>
    

    修改authenticationHandlersResolvers,原来的是默认primaryAuthenticationHandler,这里改成queryDatabaseAuthenticationHandler,自己定义的认证控制器

    
    <util:map id="authenticationHandlersResolvers">
            <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
            <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
            <entry key-ref="queryDatabaseAuthenticationHandler" value-ref="primaryPrincipalResolver" />
    
        </util:map>
    

    ok,配置就做好了,然后可以登录验证

    单点登录

    登录成功,显示页面
    在这里插入图片描述
    单点登出,链接是http://127.0.0.1:8080/cas/logout
    在这里插入图片描述

  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/mzq123/p/10990996.html
Copyright © 2011-2022 走看看