Java-以用户或管理员身份登录?遗产
我的应用程序上有一个登录系统,其中包含一组预定义用户,如下所示:Java-以用户或管理员身份登录?遗产,java,arrays,inheritance,Java,Arrays,Inheritance,我的应用程序上有一个登录系统,其中包含一组预定义用户,如下所示: User user = new User("tommy", "tommy", false); User user2 = new User("phil2", "phil2", false); User user3 = new User("phil", "phil", true); Admin admin = new Admin("benji", "benji", true); 然后将它们添加到用户数组中 userArray.add
User user = new User("tommy", "tommy", false);
User user2 = new User("phil2", "phil2", false);
User user3 = new User("phil", "phil", true);
Admin admin = new Admin("benji", "benji", true);
然后将它们添加到用户数组中
userArray.add(user);...
logIn()方法在尝试登录时循环并检查其凭据
用户可以按预期登录,但是我如何才能获得管理员帐户登录?注意管理员仍然是一个用户,只是一种特殊类型的用户,在登录时具有不同的菜单。当前该管理员帐户未被识别为用户
在我的用户类中,我有以下内容:管理员继承自用户,因为它是一个用户:
public class Admin extends User {
public Admin(String username, String password, boolean av) {
super(username, password,av);
}
LogIn()如下所示:
public void LogIn() {
Scanner in = new Scanner(System.in);
System.out.println(" Welcome to the system \n Enter your Username and Password to continue \n Username: ");
String temp = in.nextLine();
System.out.println(" Password: ");
String temp2 = in.nextLine();
//while(LOCount != 3){
for (int i = 0; i < userArray.size(); i++) {
if (userArray.get(i).CheckUsername(temp) && userArray.get(i).CheckPassword(temp2)) {
// if(userArray.get(i) instanceof User.Admin){
UserMenu();
我是新继承人,所以任何帮助我都会感激的,谢谢 您应该避免
的instanceof
。您可以这样做:
public interface Menu {
void show();
}
public class UserMenu implements Menu {
@Override
public void show() {
//show user menu
}
}
public class AdminMenu implements Menu {
@Override
public void show() {
//show admin menu
}
}
public class User {
private String username;
private String password;
public Menu getMenu() {
return new UserMenu();
}
public boolean authenticate(String username, String pass) {
return this.username.equals(username) && this.password.equals(pass);
}
//getters & setters
}
public class Admin extends User {
//Constructor
@Override
public Menu getMenu() {
return new AdminMenu();
}
}
在您的logIn()
方法中:
for (int i = 0; i < userArray.size(); i++) {
User user = userArray.get(i);
if (user.authenticate(username, password)) {
user.getMenu().show();
//for look must finish, maybe with break?
}
}
for(int i=0;i
希望有帮助。您应该避免使用
实例。您可以这样做:
public interface Menu {
void show();
}
public class UserMenu implements Menu {
@Override
public void show() {
//show user menu
}
}
public class AdminMenu implements Menu {
@Override
public void show() {
//show admin menu
}
}
public class User {
private String username;
private String password;
public Menu getMenu() {
return new UserMenu();
}
public boolean authenticate(String username, String pass) {
return this.username.equals(username) && this.password.equals(pass);
}
//getters & setters
}
public class Admin extends User {
//Constructor
@Override
public Menu getMenu() {
return new AdminMenu();
}
}
在您的logIn()
方法中:
for (int i = 0; i < userArray.size(); i++) {
User user = userArray.get(i);
if (user.authenticate(username, password)) {
user.getMenu().show();
//for look must finish, maybe with break?
}
}
for(int i=0;i
希望有帮助。你可以这样做
将login方法移动到user类可以使逻辑和属性保持抽象。重写Admin类中的login方法允许您执行其他检查
通过调用super.login()代码>管理员与普通用户具有完全相同的身份验证逻辑。通过使用final boolean isAuthorized=isAllowedToDoThis()执行附加检查代码>您可以检查管理员是否被允许执行上述操作
对于getMenu()代码>。由于重写了实现,因此只需调用getMenu()对象上的代码>,它将根据对象的类型加载用户或管理菜单
请注意,这只是一个抽象的布局,说明了如何实现它
public class User {
private final String username;
private final String password;
private final boolean something;
public User(String username, String password, boolean something) {
this.username = username;
this.password = password;
this.something = something;
}
public boolean login() {
return correctPassword && correctUsername
}
private boolean correctPassword() { }
private boolean correctUsername() { }
public Menu getMenu() {
// Return User menu
}
}
public class Admin extends User {
public Admin(String username, String password, boolean something) {
super(username, password, something);
}
@Override
public boolean login() {
final boolean isAuthenticated = super.login();
final boolean isAuthorized = isAllowedToDoThis();
return isAuthenticated && isAuthorized;
}
private boolean isAllowedToDoThis() { }
@Override
public Menu getMenu() {
// Return Admin menu
}
}
你可以这样做
将login方法移动到user类可以使逻辑和属性保持抽象。重写Admin类中的login方法允许您执行其他检查
通过调用super.login()代码>管理员与普通用户具有完全相同的身份验证逻辑。通过使用final boolean isAuthorized=isAllowedToDoThis()执行附加检查代码>您可以检查管理员是否被允许执行上述操作
对于getMenu()代码>。由于重写了实现,因此只需调用getMenu()对象上的代码>,它将根据对象的类型加载用户或管理菜单
请注意,这只是一个抽象的布局,说明了如何实现它
public class User {
private final String username;
private final String password;
private final boolean something;
public User(String username, String password, boolean something) {
this.username = username;
this.password = password;
this.something = something;
}
public boolean login() {
return correctPassword && correctUsername
}
private boolean correctPassword() { }
private boolean correctUsername() { }
public Menu getMenu() {
// Return User menu
}
}
public class Admin extends User {
public Admin(String username, String password, boolean something) {
super(username, password, something);
}
@Override
public boolean login() {
final boolean isAuthenticated = super.login();
final boolean isAuthorized = isAllowedToDoThis();
return isAuthenticated && isAuthorized;
}
private boolean isAllowedToDoThis() { }
@Override
public Menu getMenu() {
// Return Admin menu
}
}
显示您的登录()代码我现在将它添加到主要问题中。你的问题很奇怪,你在用JAAS吗?没有用JAAS,是什么让你困惑?对不起,我有时很难解释我的问题。你能为CheckUsername
和CheckPassword
方法添加代码吗?显示你的登录()代码我现在将它添加到主要问题中。你的问题很奇怪,你在用JAAS吗?没有用JAAS,是什么让你困惑?抱歉,我有时很难解释我的问题。您能为CheckUsername
和CheckPassword
方法添加代码吗?感谢您在声明Admin Admin=newAdmin(“ben”,“ben”,true)时的帮助;当声明Admin Admin=newAdmin(“ben”,“ben”,true)时,它无法识别用户中的Admin类;它无法识别用户中的Admin类?Admin无法解析为类型,因此我尝试从User类导入它,但当我这样做时,它会说导入用户无法解析?我真的不明白您的意思,但请确保将User和Admin都移动到它们自己的类文件中。其次,User和Admin类应该是公共的。如果这对你没有帮助,我需要更多的代码来看看有什么问题;当声明Admin Admin=newAdmin(“ben”,“ben”,true)时,它无法识别用户中的Admin类;它无法识别用户中的Admin类?Admin无法解析为类型,因此我尝试从User类导入它,但当我这样做时,它会说导入用户无法解析?我真的不明白您的意思,但请确保将User和Admin都移动到它们自己的类文件中。其次,User和Admin类应该是公共的。如果这对你没有帮助的话,我需要更多的代码来看看哪里出了问题。这是天才,因为它可以同时适用于控制台和GUI应用程序!通过一些添加,您可以处理与菜单交互相关的整个业务逻辑,所有这些逻辑都在菜单
s或用户
s中!这是天才,因为它可以同时适用于控制台和GUI应用程序!通过一些添加,您可以处理与菜单交互相关的整个业务逻辑,所有这些逻辑都在菜单
s或用户
s中!