ReadSoapHeader将strPwdMd5传到BloodRecordDorinfoServiceOutImpl
Beans.xml配置如下<jaxws:endpoint id="dtoStudent" implementor="cn.myblood.reimburse.out.service.impl.DtoStudentServiceOutImpl" address="/DtoStudent">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /><!-- 日志拦截 -->
<bean class="cn.myblood.reimburse.filter.ReadSoapHeader" /><!-- 包头权限验证 -->
</jaxws:inInterceptors>
</jaxws:endpoint>
ReadSoapHeader.java如下package cn.myblood.reimburse.filter;import javax.annotation.Resource;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.NodeList;import cn.myblood.reimburse.model.PriviDefUserInfo;
import cn.myblood.reimburse.service.PriviDefUserInfoService;
import cn.myblood.reimburse.util.MD5;
import cn.myblood.reimburse.util.MySOAPException;public class ReadSoapHeader extends AbstractPhaseInterceptor<SoapMessage> {
@Resource(name="priviDefUserInfoService")
private PriviDefUserInfoService userInfoService;
private SAAJInInterceptor saa = new SAAJInInterceptor();
public ReadSoapHeader(){
// TODO Auto-generated constructor stub
super(Phase.PRE_PROTOCOL);
getAfter().add(SAAJInInterceptor.class.getName());
} @Override
public void handleMessage(SoapMessage message) throws Fault {
// TODO Auto-generated method stub
SOAPMessage mess = message.getContent(SOAPMessage.class);
if (mess == null) {
saa.handleMessage(message);
mess = message.getContent(SOAPMessage.class);
}
SOAPHeader head = null;
try {
head = mess.getSOAPHeader();
} catch (SOAPException e) {
e.printStackTrace();
}
if (head == null) {
return;
}
NodeList spId = head.getElementsByTagName("userName");
NodeList spPassword = head.getElementsByTagName("password");
String strUserName = spId.item(0).getTextContent();
String strPasswordClient = spPassword.item(0).getTextContent();
PriviDefUserInfo uInfo = userInfoService.query(strUserName);
String strPasswordDb = uInfo.getPwd_new();
String strUser_id = uInfo.getUser_id();//获取用户User_ID;
String strPwdMd5 = MD5.compile(strPasswordClient+"_"+strUser_id);
if(!strPwdMd5.equals(strPasswordDb)){//判断是否验证成功
throw MySOAPException.getSOAPException("SVC0901", "鉴权失败,用户原因!!!");
}
}
}DtoStudentServiceOutImpl.java
package cn.myblood.reimburse.out.service.impl;import javax.jws.WebService;import cn.myblood.reimburse.out.service.DtoStudentServiceOut;
import cn.myblood.reimburse.util.Log4jUtil;
@WebService(targetNamespace="cn.myblood.reimburse")
public class DtoStudentServiceOutImpl implements DtoStudentServiceOut {
@Override
public int callDtoStudent(int id, int age, String name, int sendFlag) {
// TODO Auto-generated method stub
String strLog = "id:"+id+",age:"+age+",name:"+name+",sendFlag:"+sendFlag;//记录日志
Log4jUtil.forLog.info(strLog);
return id;
}
}
Beans.xml配置如下<jaxws:endpoint id="dtoStudent" implementor="cn.myblood.reimburse.out.service.impl.DtoStudentServiceOutImpl" address="/DtoStudent">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /><!-- 日志拦截 -->
<bean class="cn.myblood.reimburse.filter.ReadSoapHeader" /><!-- 包头权限验证 -->
</jaxws:inInterceptors>
</jaxws:endpoint>
ReadSoapHeader.java如下package cn.myblood.reimburse.filter;import javax.annotation.Resource;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.NodeList;import cn.myblood.reimburse.model.PriviDefUserInfo;
import cn.myblood.reimburse.service.PriviDefUserInfoService;
import cn.myblood.reimburse.util.MD5;
import cn.myblood.reimburse.util.MySOAPException;public class ReadSoapHeader extends AbstractPhaseInterceptor<SoapMessage> {
@Resource(name="priviDefUserInfoService")
private PriviDefUserInfoService userInfoService;
private SAAJInInterceptor saa = new SAAJInInterceptor();
public ReadSoapHeader(){
// TODO Auto-generated constructor stub
super(Phase.PRE_PROTOCOL);
getAfter().add(SAAJInInterceptor.class.getName());
} @Override
public void handleMessage(SoapMessage message) throws Fault {
// TODO Auto-generated method stub
SOAPMessage mess = message.getContent(SOAPMessage.class);
if (mess == null) {
saa.handleMessage(message);
mess = message.getContent(SOAPMessage.class);
}
SOAPHeader head = null;
try {
head = mess.getSOAPHeader();
} catch (SOAPException e) {
e.printStackTrace();
}
if (head == null) {
return;
}
NodeList spId = head.getElementsByTagName("userName");
NodeList spPassword = head.getElementsByTagName("password");
String strUserName = spId.item(0).getTextContent();
String strPasswordClient = spPassword.item(0).getTextContent();
PriviDefUserInfo uInfo = userInfoService.query(strUserName);
String strPasswordDb = uInfo.getPwd_new();
String strUser_id = uInfo.getUser_id();//获取用户User_ID;
String strPwdMd5 = MD5.compile(strPasswordClient+"_"+strUser_id);
if(!strPwdMd5.equals(strPasswordDb)){//判断是否验证成功
throw MySOAPException.getSOAPException("SVC0901", "鉴权失败,用户原因!!!");
}
}
}DtoStudentServiceOutImpl.java
package cn.myblood.reimburse.out.service.impl;import javax.jws.WebService;import cn.myblood.reimburse.out.service.DtoStudentServiceOut;
import cn.myblood.reimburse.util.Log4jUtil;
@WebService(targetNamespace="cn.myblood.reimburse")
public class DtoStudentServiceOutImpl implements DtoStudentServiceOut {
@Override
public int callDtoStudent(int id, int age, String name, int sendFlag) {
// TODO Auto-generated method stub
String strLog = "id:"+id+",age:"+age+",name:"+name+",sendFlag:"+sendFlag;//记录日志
Log4jUtil.forLog.info(strLog);
return id;
}
}
解决方案 »
- struts中调用了一个类的静态方法后出现No result defined for action com.kpi.grop1.action.Faculties
- hibernate的 原生sql查询 和 在数据库中查询结果集 竟然不一样
- web应用中乱码问题
- Spring事务问题
- DateUtils.parseSqlTimestamp方法有点问题
- 真好玩---异常处理和日志处理
- eWebEditor编辑器,中文乱码
- Struts中的RequestProcessor使用
- web服务高手请帮忙!!
- 数据库连接池简单问题~
- 如何判断两组字符串中具有相同的值?
- 求sql语句 相同id的插入--------------------急!!!!!!!!!!
import java.util.Map;import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;import org.apache.cxf.headers.Header;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import cn.myblood.reimburse.out.service.DtoStudentServiceOut;
import cn.myblood.reimburse.util.Log4jUtil;
@WebService(targetNamespace="cn.myblood.reimburse")
public class DtoStudentServiceOutImpl implements DtoStudentServiceOut {
@Resource
private WebServiceContext context;
@Override
public int callDtoStudent(int id, int age, String name, int sendFlag) {
// TODO Auto-generated method stub
String strLog = "id:"+id+",age:"+age+",name:"+name+",sendFlag:"+sendFlag;//记录日志
Log4jUtil.forLog.info(strLog);
Map<String, Object> headers = context.getMessageContext();
List<Header> headerList = (List<Header>) headers.get(Header.HEADER_LIST);
for (Header header : headerList) {
Node root = (Node) header.getObject();
System.out.println("soap header name:" + root.getNodeName()+ " text:" + root.getTextContent());
if ("RequestSOAPHeader".equals(root.getNodeName())) {
NodeList list = root.getChildNodes();
int size = list.getLength();
for (int i = 0; i < size; i++) {
Node node = list.item(i);
System.out.println("soap header name:" + node.getNodeName()+ " text:" + node.getTextContent());
}
}
}
return id;
}
}