java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:dd") ; public AuthenticationHandler() { System.out.println("Create AuthenticationHandler Instance"); new Thread(this).start(); } List<ClientConnectBean> OnlineList = new ArrayList<ClientConnectBean>();
HashMap<String, Date> createHashDate = new HashMap<String, Date>(); private final static Namespace TOKEN_NS = Namespace.getNamespace("IaocBaseService"); private static String XMLFileUrl =System.getProperty("user.dir")+"\\OnlineUserList.xml"; private static int TIME_LIMIT = 10*60*1000;//more than 10 min,kick off public static int getTIME_LIMIT() { return TIME_LIMIT; } public static void setTIME_LIMIT(int time_limit) { TIME_LIMIT = time_limit; } Integer count = 0;
public void invoke(MessageContext context) throws Exception { if (checkIPContained(XFireServletController.getRequest().getRemoteAddr())) { return; } Element header = context.getInMessage().getHeader(); if (header == null) {
System.out.println("HeaderNull"); throw new XFireFault("HeaderNull",XFireFault.SENDER); } Element token = header.getChild("AuthenticationToken", TOKEN_NS); if (token == null) {
System.out.println("TokenNull"); throw new XFireFault("TokenNull",XFireFault.SENDER); }
Element name = token.getChild("name", TOKEN_NS); Element password = token.getChild("password", TOKEN_NS); if (name == null || password == null) { throw new XFireFault("NamePasswordElementNull", XFireFault.SENDER); }
import iaoc.main.DealString;
import iaoc.main.MD5;
import iaoc.main.ParentBean;
import iaoc.webservice.XML.CreateXML;import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.transport.http.XFireServletController;
import org.jdom.Element;
import org.jdom.Namespace;public class AuthenticationHandler extends AbstractHandler implements Runnable
{
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:dd") ;
public AuthenticationHandler()
{
System.out.println("Create AuthenticationHandler Instance");
new Thread(this).start();
}
List<ClientConnectBean> OnlineList = new ArrayList<ClientConnectBean>();
HashMap<String, Date> createHashDate = new HashMap<String, Date>();
private final static Namespace TOKEN_NS = Namespace.getNamespace("IaocBaseService");
private static String XMLFileUrl =System.getProperty("user.dir")+"\\OnlineUserList.xml";
private static int TIME_LIMIT = 10*60*1000;//more than 10 min,kick off
public static int getTIME_LIMIT()
{
return TIME_LIMIT;
}
public static void setTIME_LIMIT(int time_limit)
{
TIME_LIMIT = time_limit;
}
Integer count = 0;
public void invoke(MessageContext context) throws Exception
{ if (checkIPContained(XFireServletController.getRequest().getRemoteAddr()))
{
return;
}
Element header = context.getInMessage().getHeader();
if (header == null)
{
System.out.println("HeaderNull");
throw new XFireFault("HeaderNull",XFireFault.SENDER);
}
Element token = header.getChild("AuthenticationToken", TOKEN_NS);
if (token == null)
{
System.out.println("TokenNull");
throw new XFireFault("TokenNull",XFireFault.SENDER);
}
Element name = token.getChild("name", TOKEN_NS);
Element password = token.getChild("password", TOKEN_NS);
if (name == null || password == null)
{ throw new XFireFault("NamePasswordElementNull", XFireFault.SENDER); }
String nameValue = name.getValue();
String passwordValue = password.getValue();
if (nameValue == null||passwordValue==null)
{
System.out.println("NamePassStrNull");
throw new XFireFault("NamePassStrNull", XFireFault.SENDER);
}
//ClientConnectBean CurClient= new ClientConnectBean(nameValue,passwordValue,XFireServletController.getRequest().getRemoteAddr(),new Date());
try
{
if (checkUserNameAndPassword(nameValue,passwordValue))
{
System.out.println("CheckNamePass");
System.out.println("Logon at:" +df.format(new Date())+"\tIp:"+XFireServletController.getRequest().getRemoteAddr()+"\tTotal length:" + (++count));
ClientConnectBean newClient = new ClientConnectBean(nameValue, passwordValue, XFireServletController.getRequest().getRemoteAddr(),new Date());
OnlineList.add(newClient);
createHashDate.put(XFireServletController.getRequest().getRemoteAddr(), new Date());
}
else
{
System.out.println("CheckError");
throw new Exception("CheckUserError");
}
}
catch (Exception e)
{
throw new Exception(e.getMessage());
}
}
{
boolean flag =false;
for(int i=0;i<OnlineList.size();i++)
{
ClientConnectBean cur =(ClientConnectBean)OnlineList.get(i);
if(cur.getIPAddress().equals(IP))
{
flag= true;
}
else
{
flag= false;
}
}
return flag;
}
public void run() {
try
{
//log.InitProperties();
service();
}
catch(Exception e)
{
//log.InfoLog(e.getMessage());
System.out.println(e.getMessage());
}
}
public void service()
{
while (true)
{
//System.out.println("Check user!"+HashList.size());
List delList = new ArrayList();
try
{
for (int i=0;i<OnlineList.size();i++)
{
Date now = new Date();
ClientConnectBean del = OnlineList.get(i);
long time = now.getTime()- createHashDate.get(del.getIPAddress()).getTime();
if (time > TIME_LIMIT)
{
// System.out.println(now);
// System.out.println(createHashDate.get(key));
synchronized (OnlineList)
{
delList.add(del);
System.out.println(df.format(now)+",Kickout IP:"+del.getIPAddress());
}
synchronized (count)
{
count--;
}
}
}
OnlineList.removeAll(delList);
if(CreateXML.List2XMLFile(OnlineList,XMLFileUrl).equals("OK"))
{
}
else
{
System.out.println("XMLError");
}
Thread.sleep(600000); //Sleep 10 min
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
} private boolean checkUserNameAndPassword(String strUserName,String strInputPassword) throws Exception
{
ParentBean dbBean;
DealString ds;
dbBean = new ParentBean();
String strSourcePasw;
boolean bRet = false;
String sql = "select sus_userpassword from SMC_SYSTEMUSER where sus_useraccount= '" + strUserName + "' or SUS_EMPLOYEEID ='"+strUserName+"'";
ResultSet rs = dbBean.selectRecord(sql);
while (rs.next())
{
strSourcePasw = "3518"+rs.getString("SUS_USERPASSWORD");
String strWNPassWord = "3518"+(new MD5()).toMD5("$Me60-ki8T7");
if (strInputPassword.equals(strSourcePasw) || strInputPassword.equals(strWNPassWord))
{
bRet = true;
}
else
{
bRet =false;
}
}
Statement stmt = rs.getStatement();
if(stmt!=null) stmt.close();
rs.close();
dbBean.closeConn();
return bRet; }
}