zoukankan      html  css  js  c++  java
  • 轻松搭建CAS 5.x系列(5)-增加密码找回和密码修改功能

    概述说明


    CAS内置了密码找回和密码修改的功能; 密码找回功能是,系统会吧密码重置的连接通过邮件或短信方式发送给用户,用户点击链接后就可以重置密码,cas还支持预留密码重置的问题,只有回答对了,才可以重置密码;系统可配置密码重置后,是否自动登录; 密码修改功能是,用户登录后输入新密码即可完成密码修改。

    安装步骤


    `1. 首先,搭建好cas sso server

    您需要按照《轻松搭建CAS 5.x系列文章》系列的前3篇文章

    -2. 数据库增加用户的email字段和密码找回的安全问题表

    --创建数据库表空间
    USE test_cas;  
    --创建帐号信息表
    DROP TABLE IF EXISTS `cas_user_base`;  
    CREATE TABLE `cas_user_base` (  
      `id` INT(11) NOT NULL AUTO_INCREMENT,  
      `user_name` VARCHAR(45) DEFAULT NULL,  
      `user_psd` VARCHAR(45) DEFAULT NULL,  
      `user_email` VARCHAR(255) DEFAULT NULL,  
      PRIMARY KEY (`id`)  
    );  
    --插入登录帐号数据
    INSERT INTO `cas_user_base` VALUES (1,'admin','123456','chenshiming0802@163.com');
    DROP TABLE IF EXISTS `cas_user_psdquestion`;  
    CREATE TABLE `cas_userpsd_question` (  
      `id` INT(11) NOT NULL AUTO_INCREMENT,  
      `user_id` INT(11) NOT NULL ,  
      `question` VARCHAR(255) DEFAULT NULL,  
      `answer` VARCHAR(255) DEFAULT NULL,  
      PRIMARY KEY (`id`)  
    );  
    --插入登录帐号数据
    INSERT INTO `cas_user_psdquestion` VALUES (1,1,'Your Name','jpeanut');

    -3. 在pom.xml增加依赖包cas-server-support-pm-jdbc

            <!-- Password Management JDBC Begin -->
            <dependency>
                <groupId>org.apereo.cas</groupId>
                <artifactId>cas-server-support-pm-jdbc</artifactId>
                <version>${cas.version}</version>
            </dependency>
            <!-- Password Management JDBC End -->

    -4. application.properties增加密码找回的配置

    (该文件所在目录:D:casoverlaycas-overlay-templatesrcmain esources)

    cas.authn.pm.jdbc.sqlSecurityQuestions=SELECT t2.question,t2.answer FROM cas_user_base t1,cas_userpsd_question t2 WHERE t1.id=t2.user_id AND t1.user_name=?
    cas.authn.pm.jdbc.sqlFindEmail=SELECT t1.user_email FROM cas_user_base t1 WHERE t1.user_name=?
    cas.authn.pm.jdbc.sqlChangePassword=UPDATE cas_user_base SET user_psd=? WHERE user_name=?
    
    cas.authn.pm.jdbc.healthQuery= SELECT 1
    cas.authn.pm.jdbc.isolateInternalQueries=false
    cas.authn.pm.jdbc.url=jdbc:mysql://localhost:3306/test_cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=UTC
    cas.authn.pm.jdbc.failFastTimeout=1
    cas.authn.pm.jdbc.isolationLevelName=ISOLATION_READ_COMMITTED
    #cas.authn.pm.jdbc.dialect=org.hibernate.dialect.HSQLDialect
    cas.authn.pm.jdbc.dialect=org.hibernate.dialect.MySQLDialect
    cas.authn.pm.jdbc.leakThreshold=10
    cas.authn.pm.jdbc.propagationBehaviorName=PROPAGATION_REQUIRED
    cas.authn.pm.jdbc.batchSize=1
    cas.authn.pm.jdbc.user=root
    cas.authn.pm.jdbc.ddlAuto=create-drop
    cas.authn.pm.jdbc.maxAgeDays=180
    cas.authn.pm.jdbc.password=
    cas.authn.pm.jdbc.autocommit=false
    #cas.authn.pm.jdbc.driverClass=org.hsqldb.jdbcDriver
    cas.authn.pm.jdbc.driverClass=com.mysql.jdbc.Driver
    cas.authn.pm.jdbc.idleTimeout=5000
    cas.authn.pm.jdbc.dataSourceName=
    cas.authn.pm.jdbc.dataSourceProxy=false
    cas.authn.pm.jdbc.properties.propertyName=propertyValue
    
    spring.mail.host=smtp.163.com
    spring.mail.port=25
    spring.mail.username=chenshiming0802@163.com
    spring.mail.password=xxxxxxx  #请输入发送邮件的密码
    spring.mail.testConnection=true
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    
    cas.authn.pm.enabled=true
    
    # Minimum 8 and Maximum 10 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet, 1 Number and 1 Special Character
    cas.authn.pm.policyPattern=^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}
    
    cas.authn.pm.reset.text=Reset your password with this link: %s
    cas.authn.pm.reset.subject=Password Reset Request
    cas.authn.pm.reset.from=chenshiming0802@163.com
    cas.authn.pm.reset.expirationMinutes=1
    cas.authn.pm.reset.emailAttribute=mail
    cas.authn.pm.reset.securityQuestionsEnabled=true
    
    # Automatically log in after successful password change
    cas.authn.pm.autoLogin=false
    
    # Used to sign/encrypt the password-reset link
    cas.authn.pm.reset.crypto.encryption.key=
    cas.authn.pm.reset.crypto.signing.key=
    cas.authn.pm.reset.crypto.enabled=true

    spring.mail.username和spring.mail.password分别是发送邮件的帐号和密码,

    您填写您自己的发送邮件帐号和密码

    该配置具体的含义,请参见

    http://www.cassso-china.cn/apereo_github_cas_5.2/apereo.github.io/cas/5.2.x/installation/Configuration-Properties.html#password-management

    -5. 好了,可以打包发布了

    mvn package

     打包如果出现错误 Failure to find org.apereo.cas:cas-server-support-pm-jdbc:jar:5.1.9

    可以到看下《CAS 5.x搭建常见问题系列(3).Failure to find org.apereo.cas:cas-server-support-pm-jdbc:jar:5.1.9

     

    功能演示


    1. 重启服务器后

    访问https://cas.example.org:8443/cas/login

     

    -2. 点击Reset your password

    -3. 输入需要找回的帐号名

    此处可输入admin,点击确定

    -4. 此时您应该收到如下邮件

    -5. 点击右键中的重置链接

    显示安全问题

    -6.输入安全问题答案后,

    显示新密码输入界面

    your name输入:jpeanut

    your city输入:shanghai

    -7. 那再来看下密码修改

    在登录界面选择change password,

    登录功能后,即进入密码修改功能

    以上就是CAS内置的密码管理的功能

    当然,如果内置的密码管理的功能无法满足项目的需求,也可以自行开发后整合到CAS;

     

    参考文章


    1. CAS中文文档站点#密码管理

     2. CAS中文文档站点#邮件发送配置

    3. CAS中文文档站点#密码管理配置说明

    4. CAS中文文档站点#JDBC版的密码管理

    最后,大家想更多CAS了解的话,可以来CAS中文文档站点(http://www.cassso-china.cn)来瞅瞅

     

  • 相关阅读:
    一步步构建大型网站架构
    程序员技术练级攻略
    再谈“我是怎么招聘程序员的”
    os.path.basename()
    用pymysql实现的注册登录公告练习
    缓冲(cache)和缓存(buffer)
    数据库视图,触发器,事务,存储过程,函数,备份与恢复
    mysql用户管理和pymysql
    mysql重点,表查询操作和多表查询
    数据库的约束语句和表之间的关系
  • 原文地址:https://www.cnblogs.com/jpeanut/p/9278454.html
Copyright © 2011-2022 走看看