如何验证Java中的用户权限级别

时间:2019-04-16 16:32:33

标签: java sqlite javafx

我有一个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.");
         }
    }

2 个答案:

答案 0 :(得分:0)

认证和授权应该是两个单独的步骤。这意味着登录不必担心获得角色。相反,当用户尝试访问资源时,这是检查用户角色是否允许访问资源的时间。

仔细查看代码后,您似乎正在执行此操作,并且遇到了if条件。您需要确定为每个角色赋予什么int值。特别是,什么值表示该用户是“管理员用户”?当您知道此值时,就需要与==进行比较。

答案 1 :(得分:-4)

除了所有这些公共无效内容之外,您还可以定义一个全局变量(int等);)

您可以在方法内部“全局”更改该变量