[Xfire]SOAP验证出错!

黄巧克力 2012-02-14 02:57:55
环境:JDK1.6.2+JBOSS4.0.5 GA+Xfire+SoapHaeder
业务处理过程:
C#终端连接WebService时,先进行SOAPHEADER的验证,走invoke函数,验证用户名密码,服务器端验证是否用户名密码正确,验证完,允许调用WebMethod,然后,服务器端的验证类还要负责踢出超时不操作用户,也就是上面的验证函数所属类还集成了Runable接口,实现了run()函数,每隔10分钟剔出超时用户,这个动作需要操作服务器程序预存的“已经登录的用户列表(记录IP、登录时间(精确到秒)”,超过十分的剔出列表。
错误:
2012-02-13 15:59:19,312 INFO [STDOUT] 15:59:19,312 ERROR [XFireServletController] Couldn't invoke servlet request.
java.lang.IllegalStateException: Can't overwrite cause
at java.lang.Throwable.initCause(Throwable.java:320)
at com.ctc.wstx.compat.Jdk14Impl.setInitCause(Jdk14Impl.java:70)
at com.ctc.wstx.exc.WstxException.<init>(WstxException.java:46)
at com.ctc.wstx.exc.WstxIOException.<init>(WstxIOException.java:16)
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:536)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:592)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:617)
at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:312)
at org.codehaus.xfire.util.STAXUtils.createXMLStreamReader(STAXUtils.java:762)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:297)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)
2012-02-13 15:59:19,312 INFO [STDOUT] 15:59:19,312 ERROR [[XFireServlet]] Servlet.service() for servlet XFireServlet threw exception
java.lang.IllegalStateException: Can't overwrite cause
at java.lang.Throwable.initCause(Throwable.java:320)
at com.ctc.wstx.compat.Jdk14Impl.setInitCause(Jdk14Impl.java:70)
at com.ctc.wstx.exc.WstxException.<init>(WstxException.java:46)
at com.ctc.wstx.exc.WstxIOException.<init>(WstxIOException.java:16)
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:536)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:592)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:617)
at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:312)
at org.codehaus.xfire.util.STAXUtils.createXMLStreamReader(STAXUtils.java:762)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:297)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)
2012-02-13 15:59:20,890 INFO [STDOUT] 15:59:20,890 INFO [DefaultFaultHandler] Fault occurred!
org.codehaus.xfire.fault.XFireFault: NamePasswordElementNull
at iaoc.webservice.SOAP.AuthenticationHandler.invoke(AuthenticationHandler.java:81)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)
...全文
156 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄巧克力 2012-02-14
  • 打赏
  • 举报
回复
后半部分:

public boolean checkIPContained(String IP)
{
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;

}



}

黄巧克力 2012-02-14
  • 打赏
  • 举报
回复
验证代码前半部分:

package iaoc.webservice.SOAP;
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());
}
}

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧