http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-ws-security.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-ws-security.adoc b/src/main/jbake/content/examples/webservice-ws-security.adoc deleted file mode 100755 index ed54aea..0000000 --- a/src/main/jbake/content/examples/webservice-ws-security.adoc +++ /dev/null @@ -1,766 +0,0 @@ -= Webservice Ws Security -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-ws-security can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-ws-security - - -*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* - -== CalculatorImpl - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.ejb.Stateless; -import javax.jws.WebService; - -/** - * This is an EJB 3 style pojo stateless session bean - * Every stateless session bean implementation must be annotated - * using the annotation @Stateless - * This EJB has a single interface: CalculatorWs a webservice interface. - */ -//START SNIPPET: code -@DeclareRoles(value = {"Administrator"}) -@Stateless -@WebService( - portName = "CalculatorPort", - serviceName = "CalculatorWsService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.calculator.CalculatorWs") -public class CalculatorImpl implements CalculatorWs, CalculatorRemote { - - @RolesAllowed(value = {"Administrator"}) - public int sum(int add1, int add2) { - return add1 + add2; - } - - public int multiply(int mul1, int mul2) { - return mul1 * mul2; - } -} ----- - - -== CalculatorRemote - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.ejb.Remote; - -@Remote -public interface CalculatorRemote { - - public int sum(int add1, int add2); - - public int multiply(int mul1, int mul2); -} ----- - - -== CalculatorWs - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.jws.WebService; - -//END SNIPPET: code - -/** - * This is an EJB 3 webservice interface - * A webservice interface must be annotated with the @Local - * annotation. - */ -//START SNIPPET: code -@WebService(targetNamespace = "http://superbiz.org/wsdl") -public interface CalculatorWs { - - public int sum(int add1, int add2); - - public int multiply(int mul1, int mul2); -} ----- - - -== ejb-jar.xml - - -[source,xml] ----- -<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" - version="3.0" id="simple" metadata-complete="false"> - - <enterprise-beans> - - <session> - <ejb-name>CalculatorImplTimestamp1way</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplTimestamp2ways</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplUsernameTokenPlainPassword</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplUsernameTokenHashedPassword</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplUsernameTokenPlainPasswordEncrypt</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplSign</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplEncrypt2ways</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplSign2ways</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - <session> - <ejb-name>CalculatorImplEncryptAndSign2ways</ejb-name> - <service-endpoint>org.superbiz.calculator.CalculatorWs</service-endpoint> - <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class> - <session-type>Stateless</session-type> - <transaction-type>Container</transaction-type> - </session> - - </enterprise-beans> - -</ejb-jar> ----- - - - -== openejb-jar.xml - - -[source,xml] ----- -<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1"> - - <ejb-deployment ejb-name="CalculatorImpl"> - <properties> - # webservice.security.realm - # webservice.security.securityRealm - # webservice.security.transportGarantee = NONE - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = UsernameToken - wss4j.in.passwordType = PasswordText - wss4j.in.passwordCallbackClass = org.superbiz.calculator.CustomPasswordHandler - - # automatically added - wss4j.in.validator.{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}UsernameToken = org.apache.openejb.server.cxf.OpenEJBLoginValidator - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplTimestamp1way"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = Timestamp - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplTimestamp2ways"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = Timestamp - wss4j.out.action = Timestamp - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplUsernameTokenPlainPassword"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = UsernameToken - wss4j.in.passwordType = PasswordText - wss4j.in.passwordCallbackClass=org.superbiz.calculator.CustomPasswordHandler - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplUsernameTokenHashedPassword"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = UsernameToken - wss4j.in.passwordType = PasswordDigest - wss4j.in.passwordCallbackClass=org.superbiz.calculator.CustomPasswordHandler - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplUsernameTokenPlainPasswordEncrypt"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = UsernameToken Encrypt - wss4j.in.passwordType = PasswordText - wss4j.in.passwordCallbackClass=org.superbiz.calculator.CustomPasswordHandler - wss4j.in.decryptionPropFile = META-INF/CalculatorImplUsernameTokenPlainPasswordEncrypt-server.properties - </properties> - </ejb-deployment> - <ejb-deployment ejb-name="CalculatorImplSign"> - <properties> - webservice.security.authMethod = WS-SECURITY - wss4j.in.action = Signature - wss4j.in.passwordCallbackClass=org.superbiz.calculator.CustomPasswordHandler - wss4j.in.signaturePropFile = META-INF/CalculatorImplSign-server.properties - </properties> - </ejb-deployment> - -</openejb-jar> ----- - - - -== webservices.xml - - -[source,xml] ----- -<webservices xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee -http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" - xmlns:ger="http://ciaows.org/wsdl" version="1.1"> - - <webservice-description> - <webservice-description-name>CalculatorWsService</webservice-description-name> - <port-component> - <port-component-name>CalculatorImplTimestamp1way</port-component-name> - <wsdl-port>CalculatorImplTimestamp1way</wsdl-port> - <service-endpoint-interface>org.superbiz.calculator.CalculatorWs</service-endpoint-interface> - <service-impl-bean> - <ejb-link>CalculatorImplTimestamp1way</ejb-link> - </service-impl-bean> - </port-component> - <port-component> - <port-component-name>CalculatorImplTimestamp2ways</port-component-name> - <wsdl-port>CalculatorImplTimestamp2ways</wsdl-port> - <service-endpoint-interface>org.superbiz.calculator.CalculatorWs</service-endpoint-interface> - <service-impl-bean> - <ejb-link>CalculatorImplTimestamp2ways</ejb-link> - </service-impl-bean> - </port-component> - <port-component> - <port-component-name>CalculatorImplUsernameTokenPlainPassword</port-component-name> - <wsdl-port>CalculatorImplUsernameTokenPlainPassword</wsdl-port> - <service-endpoint-interface>org.superbiz.calculator.CalculatorWs</service-endpoint-interface> - <service-impl-bean> - <ejb-link>CalculatorImplUsernameTokenPlainPassword</ejb-link> - </service-impl-bean> - </port-component> - <port-component> - <port-component-name>CalculatorImplUsernameTokenHashedPassword</port-component-name> - <wsdl-port>CalculatorImplUsernameTokenHashedPassword</wsdl-port> - <service-endpoint-interface>org.superbiz.calculator.CalculatorWs</service-endpoint-interface> - <service-impl-bean> - <ejb-link>CalculatorImplUsernameTokenHashedPassword</ejb-link> - </service-impl-bean> - </port-component> - <port-component> - <port-component-name>CalculatorImplUsernameTokenPlainPasswordEncrypt</port-component-name> - <wsdl-port>CalculatorImplUsernameTokenPlainPasswordEncrypt</wsdl-port> - <service-endpoint-interface>org.superbiz.calculator.CalculatorWs</service-endpoint-interface> - <service-impl-bean> - <ejb-link>CalculatorImplUsernameTokenPlainPasswordEncrypt</ejb-link> - </service-impl-bean> - </port-component> - </webservice-description> - -</webservices> ----- - - - -== CalculatorTest - - -[source,java] ----- -package org.superbiz.calculator; - -import junit.framework.TestCase; -import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor; -import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor; -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.endpoint.Endpoint; -import org.apache.cxf.frontend.ClientProxy; -import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor; -import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor; -import org.apache.ws.security.WSConstants; -import org.apache.ws.security.WSPasswordCallback; -import org.apache.ws.security.handler.WSHandlerConstants; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.xml.namespace.QName; -import javax.xml.ws.Service; -import javax.xml.ws.soap.SOAPBinding; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -public class CalculatorTest extends TestCase { - - //START SNIPPET: setup - protected void setUp() throws Exception { - Properties properties = new Properties(); - properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); - properties.setProperty("openejb.embedded.remotable", "true"); - - new InitialContext(properties); - } - //END SNIPPET: setup - - //START SNIPPET: webservice - public void testCalculatorViaWsInterface() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImpl?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); - outProps.put(WSHandlerConstants.USER, "jane"); - outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); - outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() { - - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - pc.setPassword("waterfall"); - } - }); - - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(10, calc.sum(4, 6)); - } - - public void testCalculatorViaWsInterfaceWithTimestamp1way() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplTimestamp1way?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplTimestamp1way"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP); - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(12, calc.multiply(3, 4)); - } - - public void testCalculatorViaWsInterfaceWithTimestamp2ways() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplTimestamp2ways?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplTimestamp2ways"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - endpoint.getInInterceptors().add(new SAAJInInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP); - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - Map<String, Object> inProps = new HashMap<String, Object>(); - inProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP); - WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps); - endpoint.getInInterceptors().add(wssIn); - - assertEquals(12, calc.multiply(3, 4)); - } - - public void testCalculatorViaWsInterfaceWithUsernameTokenPlainPassword() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplUsernameTokenPlainPassword?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplUsernameTokenPlainPassword"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); - outProps.put(WSHandlerConstants.USER, "jane"); - outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); - outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() { - - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - pc.setPassword("waterfall"); - } - }); - - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(10, calc.sum(4, 6)); - } - - public void testCalculatorViaWsInterfaceWithUsernameTokenHashedPassword() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplUsernameTokenHashedPassword?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplUsernameTokenHashedPassword"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); - outProps.put(WSHandlerConstants.USER, "jane"); - outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST); - outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() { - - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - pc.setPassword("waterfall"); - } - }); - - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(10, calc.sum(4, 6)); - } - - public void testCalculatorViaWsInterfaceWithUsernameTokenPlainPasswordEncrypt() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplUsernameTokenPlainPasswordEncrypt?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplUsernameTokenPlainPasswordEncrypt"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN - + " " + WSHandlerConstants.ENCRYPT); - outProps.put(WSHandlerConstants.USER, "jane"); - outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); - outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() { - - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - pc.setPassword("waterfall"); - } - }); - outProps.put(WSHandlerConstants.ENC_PROP_FILE, "META-INF/CalculatorImplUsernameTokenPlainPasswordEncrypt-client.properties"); - outProps.put(WSHandlerConstants.ENCRYPTION_USER, "serveralias"); - - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(10, calc.sum(4, 6)); - } - - public void testCalculatorViaWsInterfaceWithSign() throws Exception { - Service calcService = Service.create(new URL("http://127.0.0.1:4204/CalculatorImplSign?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorWsService")); - assertNotNull(calcService); - - // for debugging (ie. TCPMon) - calcService.addPort(new QName("http://superbiz.org/wsdl", - "CalculatorWsService2"), SOAPBinding.SOAP12HTTP_BINDING, - "http://127.0.0.1:8204/CalculatorImplSign"); - -// CalculatorWs calc = calcService.getPort( -// new QName("http://superbiz.org/wsdl", "CalculatorWsService2"), -// CalculatorWs.class); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - - Client client = ClientProxy.getClient(calc); - Endpoint endpoint = client.getEndpoint(); - endpoint.getOutInterceptors().add(new SAAJOutInterceptor()); - - Map<String, Object> outProps = new HashMap<String, Object>(); - outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE); - outProps.put(WSHandlerConstants.USER, "clientalias"); - outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() { - - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - pc.setPassword("clientPassword"); - } - }); - outProps.put(WSHandlerConstants.SIG_PROP_FILE, "META-INF/CalculatorImplSign-client.properties"); - outProps.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial"); - - WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); - endpoint.getOutInterceptors().add(wssOut); - - assertEquals(24, calc.multiply(4, 6)); - } - //END SNIPPET: webservice -} ----- - - -== CustomPasswordHandler - - -[source,java] ----- -package org.superbiz.calculator; - -import org.apache.ws.security.WSPasswordCallback; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; -import java.io.IOException; - -public class CustomPasswordHandler implements CallbackHandler { - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; - - if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN) { - // TODO get the password from the users.properties if possible - pc.setPassword("waterfall"); - } else if (pc.getUsage() == WSPasswordCallback.DECRYPT) { - pc.setPassword("serverPassword"); - } else if (pc.getUsage() == WSPasswordCallback.SIGNATURE) { - pc.setPassword("serverPassword"); - } - } -} ----- - - -= Running - - - generate keys: - - do.sun.jdk: - [echo] *** Running on a Sun JDK *** - [echo] generate server keys - [java] Certificate stored in file </Users/dblevins/examples/webservice-ws-security/target/classes/META-INF/serverKey.rsa> - [echo] generate client keys - [java] Certificate stored in file </Users/dblevins/examples/webservice-ws-security/target/test-classes/META-INF/clientKey.rsa> - [echo] import client/server public keys in client/server keystores - [java] Certificate was added to keystore - [java] Certificate was added to keystore - - do.ibm.jdk: - - run: - [echo] Running JDK specific keystore creation target - - -[source] ----- -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running org.superbiz.calculator.CalculatorTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/webservice-ws-security -INFO - openejb.base = /Users/dblevins/examples/webservice-ws-security -INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) -INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-ws-security/target/classes -INFO - Beginning load: /Users/dblevins/examples/webservice-ws-security/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-ws-security/classpath.ear -INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) -INFO - Auto-creating a container for bean CalculatorImplTimestamp1way: Container(type=STATELESS, id=Default Stateless Container) -INFO - Enterprise application "/Users/dblevins/examples/webservice-ws-security/classpath.ear" loaded. -INFO - Assembling app: /Users/dblevins/examples/webservice-ws-security/classpath.ear -INFO - Jndi(name=CalculatorImplTimestamp1wayRemote) --> Ejb(deployment-id=CalculatorImplTimestamp1way) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplTimestamp1way!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplTimestamp1way) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplTimestamp1way) --> Ejb(deployment-id=CalculatorImplTimestamp1way) -INFO - Jndi(name=CalculatorImplTimestamp2waysRemote) --> Ejb(deployment-id=CalculatorImplTimestamp2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplTimestamp2ways!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplTimestamp2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplTimestamp2ways) --> Ejb(deployment-id=CalculatorImplTimestamp2ways) -INFO - Jndi(name=CalculatorImplUsernameTokenPlainPasswordRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPassword) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenPlainPassword!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPassword) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenPlainPassword) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPassword) -INFO - Jndi(name=CalculatorImplUsernameTokenHashedPasswordRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenHashedPassword) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenHashedPassword!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenHashedPassword) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenHashedPassword) --> Ejb(deployment-id=CalculatorImplUsernameTokenHashedPassword) -INFO - Jndi(name=CalculatorImplUsernameTokenPlainPasswordEncryptRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPasswordEncrypt) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenPlainPasswordEncrypt!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPasswordEncrypt) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplUsernameTokenPlainPasswordEncrypt) --> Ejb(deployment-id=CalculatorImplUsernameTokenPlainPasswordEncrypt) -INFO - Jndi(name=CalculatorImplSignRemote) --> Ejb(deployment-id=CalculatorImplSign) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplSign!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplSign) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplSign) --> Ejb(deployment-id=CalculatorImplSign) -INFO - Jndi(name=CalculatorImplEncrypt2waysRemote) --> Ejb(deployment-id=CalculatorImplEncrypt2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplEncrypt2ways!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplEncrypt2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplEncrypt2ways) --> Ejb(deployment-id=CalculatorImplEncrypt2ways) -INFO - Jndi(name=CalculatorImplSign2waysRemote) --> Ejb(deployment-id=CalculatorImplSign2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplSign2ways!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplSign2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplSign2ways) --> Ejb(deployment-id=CalculatorImplSign2ways) -INFO - Jndi(name=CalculatorImplEncryptAndSign2waysRemote) --> Ejb(deployment-id=CalculatorImplEncryptAndSign2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplEncryptAndSign2ways!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImplEncryptAndSign2ways) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImplEncryptAndSign2ways) --> Ejb(deployment-id=CalculatorImplEncryptAndSign2ways) -INFO - Jndi(name=CalculatorImplRemote) --> Ejb(deployment-id=CalculatorImpl) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImpl!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImpl) -INFO - Jndi(name=global/classpath.ear/simple/CalculatorImpl) --> Ejb(deployment-id=CalculatorImpl) -INFO - Created Ejb(deployment-id=CalculatorImplUsernameTokenHashedPassword, ejb-name=CalculatorImplUsernameTokenHashedPassword, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplSign, ejb-name=CalculatorImplSign, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplEncryptAndSign2ways, ejb-name=CalculatorImplEncryptAndSign2ways, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplTimestamp1way, ejb-name=CalculatorImplTimestamp1way, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplSign2ways, ejb-name=CalculatorImplSign2ways, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplEncrypt2ways, ejb-name=CalculatorImplEncrypt2ways, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplUsernameTokenPlainPassword, ejb-name=CalculatorImplUsernameTokenPlainPassword, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplTimestamp2ways, ejb-name=CalculatorImplTimestamp2ways, container=Default Stateless Container) -INFO - Created Ejb(deployment-id=CalculatorImplUsernameTokenPlainPasswordEncrypt, ejb-name=CalculatorImplUsernameTokenPlainPasswordEncrypt, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplUsernameTokenHashedPassword, ejb-name=CalculatorImplUsernameTokenHashedPassword, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplSign, ejb-name=CalculatorImplSign, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplEncryptAndSign2ways, ejb-name=CalculatorImplEncryptAndSign2ways, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplTimestamp1way, ejb-name=CalculatorImplTimestamp1way, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplSign2ways, ejb-name=CalculatorImplSign2ways, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplEncrypt2ways, ejb-name=CalculatorImplEncrypt2ways, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplUsernameTokenPlainPassword, ejb-name=CalculatorImplUsernameTokenPlainPassword, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplTimestamp2ways, ejb-name=CalculatorImplTimestamp2ways, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImplUsernameTokenPlainPasswordEncrypt, ejb-name=CalculatorImplUsernameTokenPlainPasswordEncrypt, container=Default Stateless Container) -INFO - Deployed Application(path=/Users/dblevins/examples/webservice-ws-security/classpath.ear) -INFO - Initializing network services -INFO - Creating ServerService(id=httpejbd) -INFO - Creating ServerService(id=cxf) -INFO - Creating ServerService(id=admin) -INFO - Creating ServerService(id=ejbd) -INFO - Creating ServerService(id=ejbds) -INFO - Initializing network services - ** Starting Services ** - NAME IP PORT - httpejbd 127.0.0.1 4204 - admin thread 127.0.0.1 4200 - ejbd 127.0.0.1 4201 - ejbd 127.0.0.1 4203 -------- -Ready! -Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.582 sec - -Results : - -Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 ----- - -
http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-ws-with-resources-config.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-ws-with-resources-config.adoc b/src/main/jbake/content/examples/webservice-ws-with-resources-config.adoc deleted file mode 100755 index 6f15e05..0000000 --- a/src/main/jbake/content/examples/webservice-ws-with-resources-config.adoc +++ /dev/null @@ -1,9 +0,0 @@ -= webservice-ws-with-resources-config -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-ws-with-resources-config can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-ws-with-resources-config - -No README.md yet, be the first to contribute one!
