jivejdon能注册不能登录

11-05-05 weiweishouwang

把jivejdon-4.2.1配置成功之后,发现普通用户能注册不能登录成功,而管理员admin却能成功登录。调查了一下代码,发现登录代码:

    // 登录用的sql
    private static String AUTH_SQL = "select r.name from role as r,user as u,users_roles as ur where u.name=? and password=? and  ur.userId=u.userId and ur.roleId=r.roleId";
    // DefaultRolesProvider类中的provideRoles函数
    String datasource = PropertiesUtil.getProperty("JAAS_DATASOURCE");
    Connection con = this.getConnection(datasource);
    PreparedStatement ps = con.prepareStatement(AUTH_SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    ps.setString(1, username);
    ps.setString(2, password); 
    ResultSet rs = ps.executeQuery();
    while(rs.next()){   
	String name = rs.getString("name");   
	roles.add(name);   
    }   
    this.release(rs,ps,con);
<p>

代码显示该登录是到user表中去找用户,而user表中是管理员信息,普通用户注册的时候是插入到jiveuser表中。这样自然找不到数据,登录也就失败了。

不知这个问题大家有没有遇到过,又是怎么解决的了?

xincray
2011-05-05 15:53

嗯,这个问题很好,sql语句是查找的user和userrole两个表。

提供解决方案:

1.你注册的普通用户,有没有分配权限,和role权限表关联。

2.检查两张表的外键关联。

weiweishouwang
2011-05-05 15:59

我的意思是说,注册的时候是插入到jiveuser表中,而登录的时候却到user表中去找,不是找错了地方了吗。

liuliu123
2011-05-05 16:57

查询这个表是没问题

oojdon
2011-05-05 19:32

 public void createAccount(Account account) throws Exception{
        logger.debug("enter createAccount");
        String INSERT_USER = "INSERT INTO jiveUser(userID,username,passwordHash,name,nameVisible,"
                + "email,emailVisible,rewardPoints, creationDate,modifiedDate) " + "VALUES(?,?,?,?,?,?,?,?,?,?)";
        try {
            List queryParams = new ArrayList();
            queryParams.add(account.getUserIdLong());
            queryParams.add(account.getUsername());
            queryParams.add(account.getPassword());
            queryParams.add(account.getUsername());
            queryParams.add(new Integer(0));
            queryParams.add(account.getEmail());
            queryParams.add(new Integer(account.isEmailVisible() ? 1 : 0));
            queryParams.add(new Integer(0));

            long now = System.currentTimeMillis();
            String saveDateTime = ToolsUtil.dateToMillis(now);
            String displayDateTime = constants.getDateTimeDisp(saveDateTime);
            queryParams.add(saveDateTime);
            account.setModifiedDate(displayDateTime);
            queryParams.add(saveDateTime);
            account.setCreationDate(displayDateTime);

            jdbcTempSource.getJdbcTemp().operate(queryParams, INSERT_USER);
            accountSSOSql.insertSSOServer(account);            
            clearCache();
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        }
    }
<p>

jdbcTempSource.getJdbcTemp().operate(queryParams, INSERT_USER);

accountSSOSql.insertSSOServer(account);

有一个SSO数据库

2Go 1 2 下一页