WebSerice是一种开放的web服务,任何人都可以访问,但我们有时候需要考虑只有付费用户才能使用WS,所以,我们就需要对WS加入安全验证机制,当然,可以利用防火墙的IP过滤,web应用的配置从最外层去隔离非法用户,但在内层,我们也可以使用SOAP Header的方式,由客户端发送验证数据,服务端验通过后基WS访问权限。
本实例为XFire+Spring,通过Spring的org.springframework.web.servlet.DispatcherServlet直接将XFire与Spring集成。
首先,编写服务端验证类继承AbstractHandler
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
public class AuthenticationHandler extends AbstractHandler ...{
public void invoke(MessageContext cfx) throws Exception ...{
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();
try
...{
//进行身份验证 ,只有abcd@1234的用户为授权用户
if(username.equals("abcd") && password.equals("1234"))
//这语句不显示
System.out.println("身份验证通过");
else throw new Exception();
}
catch (Exception e)
...{
throw new org.codehaus.xfire.fault.XFireFault("非法的用户名和密码", org.codehaus.xfire.fault.XFireFault.SENDER);
}
}
}
接着,在客户端编写类继承AbstractHandler
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
public class ClientAuthenticationHandler extends AbstractHandler ...{
private String username = null;
private String password = null;
public ClientAuthenticationHandler() ...{
}
public ClientAuthenticationHandler(String username,String password) ...{
this.username = username;
this.password = password;
}
public void setUsername(String username) ...{
this.username = username;
}
public void setPassword(String password) ...{
this.password = password;
}
public void invoke(MessageContext context) throws Exception ...{
//为SOAP Header构造验证信息
Element el = new Element("header");
context.getOutMessage().setHeader(el);
Element auth = new Element("AuthenticationToken");
Element username_el = new Element("Username");
username_el.addContent(username);
Element password_el = new Element("Password");
password_el.addContent(password);
auth.addContent(username_el);
auth.addContent(password_el);
el.addContent(auth);
}
}
然后,在调用WebService的客户端中加入如下代码
client.addOutHandler(new ClientAuthenticationHandler("abcd1","1234"));
同时修改xfire-servlet.xml,绑定Handler
<bean id="queryMessageServiceExporter"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory" />
</property>
<property name="xfire">
<ref bean="xfire" />
</property>
<property name="serviceBean">
<ref bean="queryMessageBean" />
</property>
<property name="serviceClass">
<value>
zcpt.transfermessage.webservice.IQueryMessageService
</value>
</property>
<property name="namespace">
<value>
http://zcpt.transfermessage/QueryMessageService
</value>
</property>
<property name="inHandlers">
<ref bean="AuthenticationHandler" />
</property>
</bean>
<bean id="AuthenticationHandler"
class="zcpt.transfermessage.util.AuthenticationHandler">
</bean>
使用abcd@1234,可以正常访问WS,如果用错误帐号,则会报异常
分享到:
相关推荐
Xfire在Spring下实现安全的WebService详述---配置 -
xfire+spring+安全认证,包含服务端和客户端,xfire jar包可以从我的资源下面下或网上很多。
NULL 博文链接:https://wander312.iteye.com/blog/1180698
xfire实现webservice实例,XFire WebService开发快速起步
Spring+xFire实现webService
初学xfire webservice使用
提供客户端调用xfire开发的webservice接口详细过程;同时提供调用xfire依赖的jar包。适合新手~
xfire集成spring开发的一个数据库登陆验证实例,包含SSL安全机制
xfire的安全策略,验证、签名、加密的详细做法,含有详细例子,看完后完全掌握xfire的ws-security实现方法
xfire实现的web service应用,空项目,导入即可
java中使用xfire实现WebService,包括使用到的包和实现WebService的方法!
XFire实现webServices源码,完整项目,直接可运行
XFire中实现WS-SecurityXFire中实现WS-SecurityXFire中实现WS-Security
spring集成xfire webservice实现远程调用 将项目发布后,点击http://localhost:8080/SpringWebServiceTest/services/HelloWS?wsdl即可 其中也有客户端的调用,自己试试吧。
本文详细介绍了利用xfire组件实现webservice的服务端和客户端实例,适合入门参考和使用!
在Eclipse平台下通过Xfire发布web服务 ,介绍了客户端如何调用服务器发布的web服务
XFire是Java实现WebService的一个框架,可以完成webservice服务的发布以及对发布接口的调用的全部jar包
spring和xfire集成的时候修要的jar文件,spring需要的jar文件自己另行下载。.
NULL 博文链接:https://15838341661-139-com.iteye.com/blog/1139930