设计:在哪里放置Manager选项?

时间:2011-10-03 16:27:59

标签: java

我有一个音乐商店计划,其中有一个测试类,一个Clerk类(处理输入),一个Stocker类(指定CD的可用性和价格),Storehouse(它有所有可用的CD),以及然后CD(有价格和名称)。我想添加一个选项让管理员通过输入安全代码来添加CD。我想要做的是:当秘书要求某人的订单(他们想要哪些CD)时,您可以输入字符串“密码”,这将允许您输入一个字符串,Storehouse将检查该字符串是否合格,并且仅然后经理能够添加CD。粗略了解代码:

public class CounterPerson(){
...
    System.out.println("Hello. Indicate how many CDs you want");
    System.out.println("You can also type password to add parts. ");
    System.out.println("Here is what is available. ");
    System.out.println(storeHouse);
    String security = new String();
    if(in.next().equals("password")){
        System.out.println("Now type the password: ");
        security = in.next();
        StoreHouse.addCD(security);
    }
    else{

然后在StoreHouse类中:

public void addCD(String security){
if(checkSecure(security)){
System.out.println("You can add CDs now. Specify a name and quantity");
...
}
else{
System.out.println("You are not authorized.");
}
}

private boolean check(String security){
boolean secure = false;
if(security.equals("blahblah123"){ secure = true };
return secure;
}

我的问题:这是一个好的(安全的)设计吗?如果没有,怎么会这样?

编辑:如果不清楚,Stockhouse类也可以访问Stockhouse(这是他获取CD的地方)

1 个答案:

答案 0 :(得分:1)

依靠硬编码常量来验证安全性绝对不是一个好主意。在这种情况下,“blahblah123”对于编译类的反向工程来说不会太难。

您应该考虑系统的要求是什么,以及您需要“安全”的程度。每个用户都应该拥有自己的密码吗?每个人都使用通用密码吗?您是否要记录执行操作的用户? 如果您需要区分用户,帐户是如何创建的?例如,您可能需要一个管理“控制台”,并在您的数据库中加密密码。

您可以在多篇文章中获得一些最佳实践,甚至可以在SOverflow中进行。

很抱歉给您留下的问题多于答案;)