我写了一个程序,在加载登陆界面后,登陆的时候需要判断出是否是第一次,如果是则获得本机的ip和主机名,然后存为作为不可变的常量,然后别人把这个程序拷到其他主机上时,就会判断这不是第一次登陆,然后匹配主机名,如果不同,则需要输入备用密码,我的疑惑就是怎样识别这是不是第一次登陆呢,下面是部分代码,谢谢各位大神了先
InetAddress hostAddress;
 public static String iHostName;
 public static Boolean isFirst = true;
 String iIp;
 
 
 public UserLogin  () throws UnknownHostException{
try
{
System.out.println(isFirst);
if(isFirst){
hostAddress=InetAddress.getLocalHost();
//ip会变,但是主机名称不变,根据主机名称来判断是否需要输入备用密码
iIp=hostAddress.getHostAddress();
iHostName=hostAddress.getHostName();
isFirst=false;
}
}catch (UnknownHostException err)
{
System.out.println("获取IP地址出现错误:"+err);
}
//下面是匹配当前主机名是否是第一次登录时的主机名
if(((InetAddress.getLocalHost()).getHostName()).equals(iHostName))我判断的isFirst变量每次还是true,或者说怎样让isFirst改变后就不再变,谢谢大家了

解决方案 »

  1.   

    要获取服务器IP,不需要这么麻烦,
    String ip = InetAddress.getLocalHost().getHostAddress(); 
    这个就是获取当前主机的ip地址,软件部署在哪台机器返回的就是对应的ip地址,LZ可以试下。
      

  2.   

    感觉楼主做这个判断价值不大,主机名改变很容易啊,重装系统或者直接手动改掉
    可靠性的话,不如判断“机器码”,硬盘或CPU序列号等,这才是一般不会改变的(改变了,就相当于换电脑了)
    如果是第一次登录,把客户端的“机器码”存在文件中或数据库中去
    判断是不是第一次登录就简单了,读数据库或文件中的值,如果不为空,那说明不是第一次登录,为空,是第一次,此时把相关值存入即可。
    另外,为安全起见,存在数据库中更好点吧
      

  3.   


    大神分析的很有道理,我也知道主机名不靠谱,只是一般人可能不会轻易改变主机名,你说的那些机器码或硬盘之类的,如何获取呢,我发现个帖子就是问这个的,貌似也没有合适的答案http://bbs.csdn.net/topics/90137128 
    我现在在做框架,怎么存储这个问题还真没想好,用数据库的的确方便实用,也好编码,但是我做这个考虑的是安全性,如果数据库泄露就麻烦了,但是文件存储这方面又了解不多,我想把这些数据集成然后存成一个系统无法打开的文件类型,大神知不知道怎么处理。。
      

  4.   

    好像还是Mac地址比较稳妥,我把主机名改用Mac地址来判断