Package org.springside.examples.showcase.functional.webservice.ws

Source Code of org.springside.examples.showcase.functional.webservice.ws.SecurityWebServiceTest

package org.springside.examples.showcase.functional.webservice.ws;

import static org.junit.Assert.*;

import java.util.Map;

import javax.xml.ws.soap.SOAPFaultException;

import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springside.examples.showcase.functional.BaseFunctionalTestCase;
import org.springside.examples.showcase.ws.client.PasswordCallback;
import org.springside.examples.showcase.ws.server.UserWebService;
import org.springside.examples.showcase.ws.server.result.GetAllUserResult;
import org.springside.examples.showcase.ws.server.result.GetUserResult;

import com.google.common.collect.Maps;

/**
* WS-Security 测试,测试PlainText, Digest, SpringSecurity三种EndPoint.
*
* @author calvin
*/
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class })
@ContextConfiguration(locations = { "/webservice/applicationContext-cxf-client.xml" })
public class SecurityWebServiceTest extends BaseFunctionalTestCase implements ApplicationContextAware {

  private ApplicationContext applicationContext;

  public final void setApplicationContext(final ApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
  }

  /**
   * 测试Digest密码认证, 使用CXF的API自行创建Client.
   * @throws InterruptedException
   */
  @Test
  public void getAllUserWithDigestPassword() throws InterruptedException {

    BusFactory.setDefaultBus(null);

    String address = BASE_URL + "/services/UserServiceWithDigestPassword";
    JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean();
    proxyFactory.setAddress(address);
    proxyFactory.setServiceClass(UserWebService.class);

    //定义WSS4JOutInterceptor
    Map<String, Object> outProps = Maps.newHashMap();
    outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
    outProps.put(WSHandlerConstants.USER, "admin");
    outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST);
    outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new PasswordCallback());
    WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor(outProps);

    //将Inteceptor加入factory
    proxyFactory.getOutInterceptors().add(wss4jOut);

    //生成clientProxy
    UserWebService userWebService = (UserWebService) proxyFactory.create();

    //调用UserWebService
    GetAllUserResult result = userWebService.getAllUser();
    assertTrue(result.getUserList().size() > 0);
  }

  /**
   * 测试明文密码, 用<jaxws:client/>创建的Client.
   */
  @Test
  public void getAllUserWithPlainPassword() {
    UserWebService userWebService = (UserWebService) applicationContext.getBean("userServiceWithPlainPassword");
    GetAllUserResult result = userWebService.getAllUser();
    assertTrue(result.getUserList().size() > 0);
  }

  /**
   * 测试访问与SpringSecurity结合的EndPoint, 调用受SpringSecurity保护的方法, 用<jaxws:client/>创建的Client.
   */
  @Test
  public void getUserWithSpringSecurity() {
    UserWebService userWebService = (UserWebService) applicationContext.getBean("userServiceWithSpringSecurity");
    GetUserResult result = userWebService.getUser("1");
    assertEquals("admin", result.getUser().getLoginName());
  }

  /**
   * 测试访问没有与SpringSecurity结合的EndPoint, 调用受SpringSecurity保护的方法, 用<jaxws:client/>创建的Client.
   */
  @Test(expected = SOAPFaultException.class)
  public void getUserWithSpringSecurityWithoutPermission() {
    UserWebService userWebService = (UserWebService) applicationContext.getBean("userServiceWithPlainPassword");
    GetUserResult result = userWebService.getUser("1");
    assertEquals("admin", result.getUser().getLoginName());
  }
}
TOP

Related Classes of org.springside.examples.showcase.functional.webservice.ws.SecurityWebServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.