`
h140465
  • 浏览: 20838 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AXIS访问xfire服务端,身份验证的问题!!! 在CSDN挂了2天没人回答!!

DAO 
阅读更多
我使用xifre开发的服务端,服务端添加了身份验证(验证用户名,和密码)

  身份验证代码如下:
 
public class AuthenticationHandler extends AbstractHandler {
	
	 Properties props = new Properties();
	 SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
	 private DAOUtil dao;
    
	 public void invoke(MessageContext cfx) throws Exception {
    	 InterfaceLogger log = new InterfaceLogger();
    	
    	 String url = this.getClass().getClassLoader().getResource("validate.properties").toString().substring(5); 
			
			InputStream in = new BufferedInputStream (new FileInputStream(url));
			props.load(in);
			String flag = props.getProperty("flag");
			String psd = props.getProperty("password");
			String uname = props.getProperty("username");
			
			if(flag.equals("false"))
			return;
    	 HttpServletRequest request = XFireServletController.getRequest();
    	 OperationInfo  o = (OperationInfo) cfx.getService().getServiceInfo().getOperations().iterator().next();
    	 String service = o.getService().getServiceClass().getName()+"."+o.getMethod().getName();
    	 
    	 //生成接口访问日志
    	 log.setContent(cfx.getCurrentMessage().getBody().toString());
    	 log.setIp(request.getRemoteAddr());
    	 log.setLog_time(time.format(new Date()));
    	 log.setName(service);
    	 log.setType("*******");
    	 
    	 //将日志存入到session中
    	 cfx.getSession().put(cfx.getId(), log);
    	 
		if (cfx.getInMessage().getHeader() == null) {
			throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息",
					org.codehaus.xfire.fault.XFireFault.SENDER);
		}
		
				
		Element token = cfx.getInMessage().getHeader().getChild(
				"AuthenticationToken");
		if (token == null) {
			throw new org.codehaus.xfire.fault.XFireFault("请求必须包含身份验证信息",
					org.codehaus.xfire.fault.XFireFault.SENDER);
		}

		String username = token.getChild("Username").getValue();
		String password = token.getChild("Password").getValue();
		log.setUser_name(username);
		
		try {
			
			// 进行身份验证 ,只有abcd@1234的用户为授权用户
			if (username.equals(uname) && password.equals(psd)) 
				// 这语句不显示
				System.out.println("身份验证通过");
			else
				throw new Exception();
		} catch (Exception e) {
			log.setEnd_time(time.format(new Date()));
			dao.getSqlMapClientTemplate().insert("logger", log);
			throw new org.codehaus.xfire.fault.XFireFault("非法的用户名和密码",
					org.codehaus.xfire.fault.XFireFault.SENDER);
		}
		
	}


   现在遇到的问题是:其他系统有可能使用axis客户端访问,但是我不知道怎么在xifre服务端获取axis客户端传来的用户名,密码

   
分享到:
评论
3 楼 378629846 2012-11-24  
Call call = (Call)new Service().createCall();
call.setTargetEndpointAddress(url);
SOAPHeaderElement header = new SOAPHeaderElement("","AuthenticationToken"); 
header.setPrefix(""); 
javax.xml.soap.SOAPElement soapElement = header.addChildElement("Username"); 
soapElement.addTextNode("abcd"); 
soapElement = header.addChildElement("Password"); 
soapElement.addTextNode("1234"); 
call.addHeader(header); 
Object obj = call.invoke(method, new String[]{pramaxml});
2 楼 h140465 2011-01-12  
过几天发给代码,不论客户端把验证信息放到哪个节点都能找出来
1 楼 ldb19890624 2010-09-09  
   你这个东东 客户端怎么知道 把验证信息往哪个节点放呢。。。!!!!

相关推荐

Global site tag (gtag.js) - Google Analytics