CAS SERVER 登录部分定制开发

来源:互联网 发布:淘宝的淘气值怎么提升 编辑:程序博客网 时间:2024/06/04 19:53

学习软件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
原创粉丝点击