我有一个SQL表,其中存储用户,密码和用户角色/权限级别,Admins = 5,普通用户= 1。现在,我不确定如何将我从getUserRole方法获得的信息传递到登录事件处理程序中,因为它是一个Int方法,并且您不能从int返回布尔类型变量,还是有更好的方法?重做代码以使其更简单的方法?
登录方式
public boolean isLogin(String user, String pass) throws Exception{
PreparedStatement pr = null;
ResultSet rs = null;
String sql = "SELECT * FROM Login where username = ? and password = ?";
try{
pr = this.connection.prepareStatement(sql);
pr.setString(1, user);
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next()){
rs.getInt("role");
return true;
}
return false;
}
catch(SQLException ex){
return false;
}
finally{
pr.close();
rs.close();
}
}
获取用户权限方法
public int getUserRole(String user) throws Exception
{
PreparedStatement pr = null;
ResultSet rs = null;
String sql = "SELECT * FROM Login WHERE username = ? AND role = ?";
try
{
pr = this.connection.prepareStatement(sql);
pr.setString(1, user);
if(rs.next())
{
int role = rs.getInt("role");
return role;
}
else{
return 0;
}
}
catch(SQLException ex)
{
return 0;
}
finally
{
pr.close();
rs.close();
}
}
最后是控制器,即登录事件处理程序
@FXML
public void Login (ActionEvent event){
try{
if(this.loginModel.isLogin(this.username.getText(), this.password.getText())){
Stage stage = (Stage) this.login.getScene().getWindow();
stage.close();
if(this.loginModel.getUserRole(this.username.getText()))//error is here,
cant get username as its a boolean type and not int
}
}
catch (Exception localException)
{
this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
}
}
答案 0 :(得分:0)
认证和授权应该是两个单独的步骤。这意味着登录不必担心获得角色。相反,当用户尝试访问资源时,这是检查用户角色是否允许访问资源的时间。
仔细查看代码后,您似乎正在执行此操作,并且遇到了if
条件。您需要确定为每个角色赋予什么int
值。特别是,什么值表示该用户是“管理员用户”?当您知道此值时,就需要与==
进行比较。
答案 1 :(得分:-4)
除了所有这些公共无效内容之外,您还可以定义一个全局变量(int等);)
您可以在方法内部“全局”更改该变量