两个页面一个登录一个显示!利用IO流读本地磁盘里面的文件,用户名和密码!
另外建一个文件保存哪个用户登录的,IP,登录次数,登录时间
要求:
1登陆次数累加
2记录每次的IP与时间
我的思路:使用xstream 持久化对象到xml文件中,每次判断的时候再反序列化到内存,做相应的逻辑判断。
但是我总觉得效率很低,每次验证都要重新读取xml文件
xml 文件:
登陆用户名密码文件root.xml
<users> <user> <user> <username>ysen2</username> <password>123</password> </user> <user> <username>ysen</username> <password>123</password> </user> </user> </users>
日志文件userloginfo.xml
<root> <userLogInfos> <userLogInfo> <userName>ysen</userName> <loginInfos> <loginInfo> <ip>127.0.0.1</ip> <loginTime>2010-04-27 03:38:46.781 CST</loginTime> </loginInfo> <loginInfo> <ip>127.0.0.1</ip> <loginTime>2010-04-27 03:40:55.921 CST</loginTime> </loginInfo> <loginInfo> <ip>127.0.0.1</ip> <loginTime>2010-04-27 03:44:13.187 CST</loginTime> </loginInfo> <loginInfo> <ip>127.0.0.1</ip> <loginTime>2010-04-27 03:45:45.281 CST</loginTime> </loginInfo> <loginInfo> <ip>127.0.0.1</ip> <loginTime>2010-04-27 04:14:41.125 CST</loginTime> </loginInfo> </loginInfos> <count>29</count> </userLogInfo> <userLogInfo> <userName>ysen2</userName> <loginInfos> <loginInfo> <ip>192.168.0.1</ip> <loginTime>2010-04-27 02:24:07.609 CST</loginTime> </loginInfo> <loginInfo> <ip>192.168.0.2</ip> <loginTime>2010-04-27 02:24:07.609 CST</loginTime> </loginInfo> </loginInfos> <count>20</count> </userLogInfo> </userLogInfos> </root>
主要业务代码:
package com.ysen;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class LogManager {
private static String filePath = "d:/userloginfo.xml";
private static String rootPath = "d:/root.xml";
public static String getFilePath() {
return filePath;
}
public static void setFilePath(String filePath) {
if (filePath != null && !filePath.equals("")) {
LogManager.filePath = filePath;
}
}
public static String getRootPath() {
return rootPath;
}
public static void setRootPath(String rootPath) {
LogManager.rootPath = rootPath;
}
private static XStream xstream = new XStream(new DomDriver());// 不需要XPP3库
static {
// 序列化一个对象到XML
xstream.alias("userLogInfo", UserLogInfo.class);
xstream.alias("loginInfo", loginInfo.class);
xstream.alias("root", Root.class);
xstream.alias("users", Users.class);
xstream.alias("user", ValidUser.class);
}
private LogManager() {
}
public static XStream getInstance() {
if (xstream != null) {
return xstream;
}
return new XStream(new DomDriver());
}
public static boolean validPassword( User user){
/*
Users users = new Users();
ValidUser validuser1 = new ValidUser();
validuser1.setUsername("ysen");
validuser1.setPassword("123");
ValidUser validuser2 = new ValidUser();
validuser2.setUsername("ysen2");
validuser2.setPassword("123");
users.addUser(validuser2);
users.addUser(validuser1);
FileOutputStream fs = null;
try {
fs = new FileOutputStream("d:/root.xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(users, fs);
return true;*/
boolean flag = false;
FileInputStream fis = null;
try {
fis = new FileInputStream( rootPath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Users users = (Users) xstream.fromXML(fis);
List user_sub = users.getUsers();
for (Iterator iterator = user_sub.iterator(); iterator.hasNext();) {
ValidUser validUser = (ValidUser) iterator.next();
if (validUser.getUsername()!=null && validUser.getUsername()!=""&&validUser.getUsername().equals(user.getUsername())&& validUser.getPassword().equals(user.getPassword())) {
flag = true;
}
}
FileOutputStream fs = null;
try {
fs = new FileOutputStream( rootPath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(users, fs);
return flag;
}
public static void validata(User user) {
/*
* 验证用户名与密码
*/
if(!validPassword( user)){
return ;
}
FileInputStream fis = null;
try {
fis = new FileInputStream( filePath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Root root = (Root) xstream.fromXML(fis);
List userloginInfos = root.getUserLogInfo();
for (Iterator iterator = userloginInfos.iterator(); iterator.hasNext();) {
UserLogInfo userlogin = (UserLogInfo) iterator.next();
if (userlogin.getUserName().equals(user.getUsername())) {
// 登陆次数累加1
userlogin.addCount();
// 添加ip 与 登陆时间
loginInfo entry = new loginInfo();
entry.setIp(user.getIp());
entry.setLoginTime(user.getTime());
userlogin.add(entry);
}
}
FileOutputStream fs = null;
try {
fs = new FileOutputStream( filePath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(root, fs);
}
}