`
enenxie
  • 浏览: 32809 次
社区版块
存档分类
最新评论

ws cxf 验证访问

    博客分类:
  • cxf
 
阅读更多

一、服务端代码

接口类

 

@WebService
public interface HelloWorld {
    public String sayHello(String param);

}

 实现类

 

 

@WebService
public class HelloWorldImpl implements HelloWorld {
    @Override
    public String sayHello(String param) {
        System.out.println("====================>"+param);
        return param;
    }
}

 拦截器回调类

 

 

public class ServerPasswordCallback implements CallbackHandler {
    private Map<String, String> passwords = new HashMap<String, String>();

    public ServerPasswordCallback() {
        passwords.put("admin", "admin");
        passwords.put("test", "test");
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        System.out.println("server:callbacks.length-" + callbacks.length);
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
            System.out.println("============>username:"+pc.getIdentifier());
            System.out.println("============>password:"+pc.getPassword());
            if (!passwords.containsKey(pc.getIdentifier()))
                try {
                    throw new WSSecurityException("user not match");
                } catch (WSSecurityException e) {
                    e.printStackTrace();
                }
            String pass = passwords.get(pc.getIdentifier());
            pc.setPassword(pass);
        }
    }
}

 服务端spring配置

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<bean id="logIn" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
	<bean id="logOut" class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
	<bean id="saajIn" class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
	<bean id="wss4jIn" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
		<constructor-arg>
			<map>
				<entry key="action" value="UsernameToken" />
				<entry key="passwordType" value="PasswordText" />
				<entry key="passwordCallbackClass" value="ws.test.server.security.ServerPasswordCallback" />
			</map>
		</constructor-arg>
	</bean>

	<jaxws:server id="helloWorld" serviceClass="ws.test.server.HelloWorld"
		address="/helloWorldRemote">
		<jaxws:inInterceptors>
				<ref local="logIn"/>
				<ref local="saajIn"/>
				<ref local="wss4jIn"/>
		</jaxws:inInterceptors>
		<jaxws:outInterceptors>
				<ref local="logOut"/>
		</jaxws:outInterceptors>
		<jaxws:serviceBean>
			<!-- 要暴露的 bean 的引用 -->
			<bean class="ws.test.server.impl.HelloWorldImpl"></bean>
		</jaxws:serviceBean>
	</jaxws:server>
</beans>

二、 客户端代码

 

客户端回调处理类

 

public class ClientPasswordCallback implements CallbackHandler {
    private Map<String, String> passwords = new HashMap<String, String>();

    public ClientPasswordCallback() {
        passwords.put("admin", "admin");
        passwords.put("test", "test");
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        System.out.println("client:callbacks.length-" + callbacks.length);
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
            int usage = pc.getUsage();
            if (!passwords.containsKey(pc.getIdentifier()))
                try {
                    throw new WSSecurityException("user not exists ");
                } catch (WSSecurityException e) {
                    e.printStackTrace();
                }
            String pass = passwords.get(pc.getIdentifier());
            if (usage == WSPasswordCallback.USERNAME_TOKEN && pass != null) {
                System.out.println("client:pass" + pass);
                pc.setPassword(pass);
                return;
            }
        }
    }
}

 客户端调用代码

JaxWsProxyFactoryBean proxyFactoryBean = new JaxWsProxyFactoryBean();
proxyFactoryBean.setServiceClass(HelloWorld.class);
proxyFactoryBean.setAddress("http://localhost:8085/web/services/wRemote");
proxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
proxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
proxyFactoryBean.getOutInterceptors().add(new SAAJOutInterceptor());
        
Map<String,Object> param =new HashMap<String,Object>();
param.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
param.put(WSHandlerConstants.USER, "admin");
param.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
param.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName());
WSS4JOutInterceptor wss4jOutInterceptor = new WSS4JOutInterceptor(param);
proxyFactoryBean.getOutInterceptors().add(wss4jOutInterceptor);

HelloWorld hw = (HelloWorld)proxyFactoryBean.create();
System.out.println(hw.sayHello("aaaaa"));

 

 或

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:client id="client" serviceClass="ws.test.server.HelloWorld"
		address="http://localhost:8080/ws-test-web/services/helloWorldRemote">
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:inInterceptors>
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
			<bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"></bean>
			<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
				<constructor-arg>
					<map>
						<entry
							key="#{T(org.apache.ws.security.handler.WSHandlerConstants).ACTION}"
							value="#{T(org.apache.ws.security.handler.WSHandlerConstants).USERNAME_TOKEN}" />
						<entry
							key="#{T(org.apache.ws.security.handler.WSHandlerConstants).USER}"
							value="admin" />
						<entry
							key="#{T(org.apache.ws.security.handler.WSHandlerConstants).PASSWORD_TYPE}"
							value="#{T(org.apache.ws.security.WSConstants).PW_TEXT}" />
						<entry
							key="#{T(org.apache.ws.security.handler.WSHandlerConstants).PW_CALLBACK_CLASS}"
							value="ws.test.server.security.ClientPasswordCallback" />
					</map>
				</constructor-arg>
			</bean>
		</jaxws:outInterceptors>
	</jaxws:client>
</beans>

 

 

分享到:
评论

相关推荐

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    在本文中,我们将深入探讨如何在Apache CXF框架中实现客户端和服务器端的权限验证。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和服务级应用程序。它支持多种Web服务标准,包括SOAP、...

    我的cxf与ws-security

    【描述】提到的"给CXF加上了一把密码锁"意味着在CXF的Web服务中实现了身份验证和加密功能,这通常是通过配置WS-Security策略来实现的。WS-Security提供了多种安全特性,如数字签名、消息加密、用户名令牌、X.509证书...

    CXF 通过用户名和密码进行验证

    总结,"CXF 通过用户名和密码进行验证"涉及到了Web服务安全的基本概念,包括WS-Security标准、CXF的安全配置以及最佳实践。理解并正确应用这些知识对于开发安全的Web服务至关重要。提供的压缩包文件"cxftestClient...

    cxf 安全验证例子

    5. **角色基授权**:通过在SOAP消息中添加WS-政策或WS-SecurityPolicy声明,可以实现基于角色的访问控制。 6. **令牌认证**:如SAML令牌,可以实现单点登录(SSO)功能。 源码示例可能包括以下几个关键部分: - *...

    纯java调用ws-security+CXF实现的webservice安全接口

    本文将深入探讨如何使用CXF框架结合ws-security标准来实现对Java客户端调用Web服务的安全接口。CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务,而ws-security(Web Services Security)则是用于...

    使用cxf的webservice安全验证

    本篇将深入探讨如何使用Apache CXF进行Web服务的安全验证。 首先,我们要了解Web服务安全的基本概念。Web服务安全通常涉及身份验证、授权、加密和消息完整性。Apache CXF支持多种安全模型,包括基本认证、digest...

    2.CXF安全访问之Http Basic Auth(一)

    工具方面,CXF提供了多种工具帮助开发者管理和调试服务,如CXF的WS-SecurityTest工具,可以模拟不同的安全场景,包括基本认证。此外,使用像Postman这样的HTTP客户端工具,也可以方便地测试带有基本认证的Web服务。 ...

    cxf+ws-security-JAR

    综上所述,"cxf+ws-security-JAR"是针对Web服务安全调用的解决方案,通过Apache CXF和WS-Security标准,为Web服务提供了强大的安全保障,确保了敏感数据的传输安全和用户身份的有效验证。这个JAR包很可能包含了一些...

    CXF WS-Security WSS4J 例子

    在CXF中,WS-Security(Web Services Security)是一种关键的安全机制,用于确保Web服务的安全通信。WSS4J(Web Services Security for Java)是Apache的开源库,它为Java应用程序提供了实施WS-Security标准的功能。...

    4.CXF安全访问之单向SSL或者双向SSL(三)

    本篇将详细探讨如何使用CXF实现单向SSL(Secure Sockets Layer)和双向SSL的安全访问。首先,我们需要理解SSL的基本概念。 SSL是一种网络安全协议,用于在客户端和服务器之间建立加密连接,确保数据传输的隐私和...

    cxf 3.1.1 jar包

    8. **cxf-rt-ws-security.jar**: 包含了WS-Security和其他安全相关的实现,用于Web服务的安全认证和加密。 9. **cxf-tools-common.jar** 和 **cxf-tools-wsdlto-core.jar** 等工具类库,用于生成服务端和客户端代码...

    WebService:Axis客户端调用需要身份验证的CXF服务

    身份验证是确保只有授权用户或系统能够访问服务的关键步骤。在CXF服务中,可能需要基本HTTP认证、 Digest认证、WS-Security(如X.509证书或Kerberos)等形式的身份验证。 当Axis客户端需要调用一个需要身份验证的...

    cxf源代码,样例,cxfdemo

    4. **WS-Security**:CXF提供了强大的安全特性,支持WS-Security标准,可以实现基于证书的身份验证、消息加密和签名等安全功能。 5. **拦截器和终结点**:CXF的拦截器机制允许你在服务调用的生命周期中插入自定义...

    CXF WSSCEURITRY 身份认证demo

    通过学习这个示例,开发者可以了解如何在实际项目中集成CXF的WS-Security功能,确保Web服务的安全通信,防止未经授权的访问,并满足企业级的安全要求。这不仅对理解CXF框架的深度功能有帮助,也是提升Web服务开发...

    3.CXF安全访问之SIGN_ENC(二)

    【标题】:“3.CXF安全访问之SIGN_ENC(二)” 在本文中,我们将深入探讨Apache CXF框架中实现的安全访问机制,特别是SIG_N_ENC,这是一个结合了签名(Signature)和加密(Encryption)的安全策略。CXF是一个开源的...

    CXF V3.2.4 实现的WebService调用(带安全认证)

    在Web服务中,安全认证是验证客户端请求的身份的过程,以确保只有授权的用户或系统可以访问服务。在CXF中,我们可以使用WS-Security(Web Services Security)标准来实现这一功能,它支持多种安全机制,如用户名令牌...

    cxf框架访问webservice服务之获取QQ在线状态

    在代码中,我们会创建一个CXF的JAX-WS(Java API for XML Web Services)客户端,该客户端将与指定的WebService进行通信。我们需要设置服务端点地址,通常是WSDL文件中的服务URL,然后调用相应的服务方法来获取QQ...

    springboot整合CXF发布webservice和客户端调用

    - 创建一个服务接口,使用JAX-WS注解如`@WebService`来标记,定义服务的方法。 - 实现服务接口,并使用`@WebService(serviceName = "...")`标记实现类。 - 在SpringBoot主类中,使用`@EnableCxfRsServer`开启CXF...

Global site tag (gtag.js) - Google Analytics