读书人

CXF 2.5 服务端跟客户端添加安全认证

发布时间: 2012-06-27 14:20:09 作者: rapoo

CXF 2.5 服务端和客户端添加安全认证

CXF Download: http://www.apache.org/dyn/closer.cgi?path=/cxf/2.5.2/apache-cxf-2.5.2.zip

?

服务端代码

IHi.java

package com.cumce.spring.service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;//import javax.jws.soap.SOAPBinding;//import javax.jws.soap.SOAPBinding.Style;/** * IHi.java *  * @author   * @version 1.0, 2012-2-26 * @since   JDK1.5 */@WebService//@SOAPBinding(style = Style.RPC)public interface IHi {@WebResult(name = "result") String call(@WebParam(name = "name") String name);}

Hi.java

package com.cumce.spring.service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;/** * Hi.java *  * @author  * @version 1.0, 2012-2-26 * @since   JDK1.5 */@WebServicepublic class Hi implements IHi {/* (non-Javadoc) * @see com.cumce.spring.service.IHi#call(java.lang.String) */@Overridepublic @WebResult(name = "result") String call(@WebParam(name = "name") String name) {String s = "Hi, " + name;System.out.println(s);return s;}}

ServerPasswordCallback.java

package com.cumce.spring.handler;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.ws.security.WSPasswordCallback;/** * ServerPasswordCallback.java *  * @author  * @version 1.0, 2012-2-26 * @since   JDK1.5 */public class ServerPasswordCallback implements CallbackHandler {/* (non-Javadoc) * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) */@Overridepublic void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException {WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];if (pc.getIdentifier().equals("user_name")) { // usernamepc.setPassword("password"); // passwordSystem.out.println("通过安全认证");}}}

application-context.xml

<?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"xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"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.xsdhttp://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd"><import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-extension-*.xml" /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><!-- 发布服务 --><bean id="obj" /><jaxws:endpoint id="hi" implementor="#obj" address="/hiService"><jaxws:inInterceptors><bean /><bean /><bean value="UsernameToken" /><entry key="passwordType" value="PasswordDigest" /><entry key="passwordCallbackRef"><ref bean="serverPasswordCallback" />                        </entry></map></constructor-arg></bean>  </jaxws:inInterceptors></jaxws:endpoint><bean id="serverPasswordCallback" /></beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>SPN</display-name><!-- Spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:application-context.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- CXF --><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

?

启动Tomcat服务,发布WebService,略...

?

客户端代码

ClientPasswordCallback.java

package com.cumce.spring.handler;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.ws.security.WSPasswordCallback;/** * ClientPasswordCallback.java *  * @author * @version 1.0, 2012-2-26 * @since   JDK1.5 */public class ClientPasswordCallback implements CallbackHandler {/* (non-Javadoc) * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) */@Overridepublic void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException {WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];// Identifier和Password不能为空,否则无法通过验证pc.setIdentifier("user_name"); // usernamepc.setPassword("password"); // password}}

application-client.xml

<?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"xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"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.xsdhttp://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd"><import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-extension-*.xml" /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><bean id="propertyConfigurer" address="http://localhost:8080/spring/hiService" service/>            <bean />            <bean value="UsernameToken" /><entry key="passwordType" value="PasswordDigest" /><entry key="user" value="user_name" />            <entry key="passwordCallbackRef">                            <ref bean="clientPasswordCallback" />                        </entry>            </map>            </constructor-arg>            </bean></jaxws:outInterceptors></jaxws:client><bean id="clientPasswordCallback" /></beans>

SpringClient.java

package com.cumce.spring.client;import javax.xml.ws.soap.SOAPFaultException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.cumce.spring.service.IHi;import com.cumce.spring.service.pojo.IPersonService;/** * SpringClient.java *  * @author  * @version 1.0, 2012-2-26 * @since   JDK1.5 */public class SpringClient {/** * Application entry point. */public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("application-client.xml");try {IHi hi = (IHi) context.getBean("client");System.out.println(hi.call("CXF Client"));} catch (SOAPFaultException ex) {ex.printStackTrace();}}}
?

?

读书人网 >软件架构设计

热点推荐