xml 记录 用户访问记录

两个页面一个登录一个显示!利用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);

	}
	
	
	
	
	

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值