在我的Java应用程序中我尝试创建用户组并根据用户所属的用户组为用户分配权限。这就是我编程的方式。当用户登录系统时,获取用户名并存储在静态变量中。当用户打开任何表单时,从静态变量中获取用户名并检查其组和权限。根据权限禁用并启用表单的某些组件。这里我有问题从静态变量stgroupName检索值。方法checkuserrights()在ItmMgt类中没有获取当前用户的名称。有人可以帮助我理解这里的错误。我想,应该有很多更好的方法来做到这一点。所以欢迎任何建议。
public class Login extends javax.swing.JInternalFrame {
public static String USERNAME;
USERNAME = txtUserName.getText(); // get the user name to static variable
}
public class ItemMgt extends javax.swing.JInternalFrame {
public ItemMgt() {
initComponents();
checkuserrights();
genarateID();
}
private void checkuserrights() {
try {
Usergroup usergroup = UserGroupController.getUserRights(Login.USERNAME);// check the user's rights passing user name from static variable.
if (usergroup != null) {
btnDelete.setEnabled(usergroup.isDeleteItem());
btnAdd.setEnabled(usergroup.isAdditem());
btnUpdate.setEnabled(usergroup.isUpdateitem());
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex);
}
}
public class UserGroupController {
public static Usergroup getUserRights(String username) throws ClassNotFoundException, SQLException {
Connection conn = DBConnection.conn();
String sql = "select * from UserGroup where uGroupName = ?";
Object[] values = {username};
ResultSet res = DBHandller.getData(sql, conn, values);
while (res.next()) {
String grpName = res.getString("uGroupName");
boolean additem = res.getBoolean("addItem");
boolean delitem = res.getBoolean("delteItem");
boolean upitem = res.getBoolean("editItem");
Usergroup ugroup = new Usergroup(grpName, additem, delitem, upitem);
return ugroup;
}
return null;
}
}
答案 0 :(得分:3)
静态变量根据定义是一个gloabl对象。在一个实例中更改值时,该对象的所有其他实例的值将具有相同的值。这就是使用静态的重点。
对我来说,你的对象设计是错误的,你应该使用一个包含用户信息的对象,其中包括组名。您可以在代码中传递此对象。