CAS SERVER 登录部分定制开发

学习软件Moodle需要开发成无记录模式,集成CAS模式,一个用户绑定一个moodle账号,为了解决这个问题,需要定制开发CAS登录认证模块。

第一种方法:  

修改模块如下:

cas-server-3.5.1

包路径 org.jasig.cas.authentication.principal;

修改类UsernamePasswordCredentials.java

    /**
    * @param userName The userName to set.
    */
   public final void setUsername(final String userName) {    
      this.username = userName;        
  }

注释掉,修改代码如下,在每次设置用户名的时候,随机从mdl_user里选取一个账号,达到无记录的模式,方便管理员对系统学习账号的控制管理。

 public final void setUsername(final String userName) {

//此处可定义业务逻辑,随机选择moodle的学习账号
    if(userName.equalsIgnoreCase("sxyy0102016"))
    {
    this.username = "fdadmin";

              -- SELECT username FROM mdl_user  ORDER BY RAND()  LIMIT n;
              --n:数据条数
    }
    else
    {
        this.username = userName;
        }
    }


修改完后将编译后的class置入cas-server-core-3.5.1.jar包中,重启服务生效。

无记录学习模式改造成功。

第二种方法:

修改模块如下:

cas-server-support-jdbc-3.5.1

包路径 org.jasig.cas.adaptors.jdbc;

修改类QueryDatabaseAuthenticationHandler.java

将以下代码注释掉

 protected final boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) throws AuthenticationException {
        final String username = getPrincipalNameTransformer().transform(credentials.getUsername());
        final String password = credentials.getPassword();
        final String encryptedPassword = this.getPasswordEncoder().encode(
            password);         
        try {
            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);
            UsernamePasswordCredentials userinfo = (UsernamePasswordCredentials)credentials;         
            return dbPassword.equals(encryptedPassword);            
            
        } catch (final IncorrectResultSizeDataAccessException e) {
            // this means the username was not found.
            return false;
        }
    }

修改为:


 protected final boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) throws AuthenticationException {
        final String username = getPrincipalNameTransformer().transform(credentials.getUsername());
        final String password = credentials.getPassword();
        final String encryptedPassword = this.getPasswordEncoder().encode(
            password);
//        String mdl_sql = "SELECT username FROM mdl_user  ORDER BY RAND()  LIMIT 1";  
        String mdl_sql = "SELECT DISTINCT(username) FROM mdl_user a,  mdl_course_display  b WHERE a.id = b.`userid`  ORDER BY RAND()  LIMIT 1";
        try {
            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);
            UsernamePasswordCredentials userinfo = (UsernamePasswordCredentials)credentials;
            if(dbPassword.equals(encryptedPassword) == true)
            {
            String mdl_userName = getJdbcTemplate().queryForObject(mdl_sql, String.class);
//             credentials.setUsername("fdadmin");
            System.out.println("mdl_userName="+mdl_userName);
            credentials.setUsername(mdl_userName);
            }
            return dbPassword.equals(encryptedPassword);            
            
        } catch (final IncorrectResultSizeDataAccessException e) {
            // this means the username was not found.
            return false;
        }
    }



修改完后将编译后的class置入cas-server-core-3.5.1.jar包中,重启服务生效。

无记录学习模式改造成功。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值