【问题标题】:How do I verified the user authority level in java如何在java中验证用户权限级别
【发布时间】:2021-07-24 08:13:35
【问题描述】:

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

【问题讨论】:

    标签: java sqlite javafx


    【解决方案1】:

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

    仔细查看您的代码后,您似乎正在这样做并且遇到了if 条件的问题。您需要确定每个角色的int 值。特别是,什么值意味着用户是“管理员用户”?知道这个值后,需要和==做个对比。

    【讨论】:

    • 好吧,如果它检测到它是管理员登录,它会显示一个管理员 jframe,如果它是一个普通用户,它只会显示普通用户 jframe,所以我需要知道如何这样做
    • @User2382 查看我的编辑以获取有关如何修复代码的更多建议。
    • 嗯,我明白了,现在我在将它传递给事件处理程序时遇到问题,因为方法和事件处理程序都在不同的 java 文件中,所以我应该如何将信息传递给事件处理程序函数?
    • @User2382 你不需要传递任何东西。您需要将this.loginModel.getUserRole() 的返回值与代表管理员用户的任何值进行比较。
    • 类似if(this.loginMode.getUserRole(this.username.getInt()) == '5') 的东西?或者是别的什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2012-12-03
    • 1970-01-01
    • 2019-01-13
    • 2015-06-22
    • 2012-04-21
    • 2011-06-26
    相关资源
    最近更新 更多