コード例 #1
0
ファイル: WSConnectionImpl.java プロジェクト: liu-jing/teiid
  private <T> void configureWSSecurity(Dispatch<T> dispatch) {
    if (this.mcf.getAsSecurityType() == WSManagedConnectionFactory.SecurityType.WSSecurity) {
      Bus bus = BusFactory.getThreadDefaultBus();
      BusFactory.setThreadDefaultBus(this.mcf.getBus());
      try {
        Client client = ((DispatchImpl) dispatch).getClient();
        Endpoint ep = client.getEndpoint();

        // spring configuration file
        if (this.mcf.getOutInterceptors() != null) {
          for (Interceptor i : this.mcf.getOutInterceptors()) {
            ep.getOutInterceptors().add(i);
          }
        }

        // ws-security pass-thru from custom jaas domain
        Subject subject = ConnectionContext.getSubject();
        if (subject != null) {
          WSSecurityCredential credential =
              ConnectionContext.getSecurityCredential(subject, WSSecurityCredential.class);
          if (credential != null) {
            if (credential.useSts()) {
              dispatch
                  .getRequestContext()
                  .put(SecurityConstants.STS_CLIENT, credential.buildStsClient(bus));
            }
            if (credential.getSecurityHandler() == WSSecurityCredential.SecurityHandler.WSS4J) {
              ep.getOutInterceptors()
                  .add(new WSS4JOutInterceptor(credential.getRequestPropterties()));
              ep.getInInterceptors()
                  .add(new WSS4JInInterceptor(credential.getResponsePropterties()));
            } else if (credential.getSecurityHandler()
                == WSSecurityCredential.SecurityHandler.WSPOLICY) {
              dispatch.getRequestContext().putAll(credential.getRequestPropterties());
              dispatch.getResponseContext().putAll(credential.getResponsePropterties());
            }
          }

          // When properties are set on subject treat them as they can configure WS-Security
          HashMap<String, String> properties =
              ConnectionContext.getSecurityCredential(subject, HashMap.class);
          for (String key : properties.keySet()) {
            if (key.startsWith("ws-security.")) { // $NON-NLS-1$
              ep.put(key, properties.get(key));
            }
          }
        }
      } finally {
        BusFactory.setThreadDefaultBus(bus);
      }
    }
  }
コード例 #2
0
ファイル: WSConnectionImpl.java プロジェクト: liu-jing/teiid
  private <T> void setDispatchProperties(Dispatch<T> dispatch, String binding) {
    if (this.mcf.getAsSecurityType() == WSManagedConnectionFactory.SecurityType.HTTPBasic) {

      String userName = this.mcf.getAuthUserName();
      String password = this.mcf.getAuthPassword();

      // if security-domain is specified and caller identity is used; then use
      // credentials from subject
      Subject subject = ConnectionContext.getSubject();
      if (subject != null) {
        userName = ConnectionContext.getUserName(subject, this.mcf, userName);
        password = ConnectionContext.getPassword(subject, this.mcf, userName, password);
      }

      dispatch.getRequestContext().put(Dispatch.USERNAME_PROPERTY, userName);
      dispatch.getRequestContext().put(Dispatch.PASSWORD_PROPERTY, password);
    } else if (this.mcf.getAsSecurityType() == WSManagedConnectionFactory.SecurityType.Kerberos) {
      boolean credentialFound = false;
      Subject subject = ConnectionContext.getSubject();
      if (subject != null) {
        GSSCredential credential =
            ConnectionContext.getSecurityCredential(subject, GSSCredential.class);
        if (credential != null) {
          dispatch.getRequestContext().put(GSSCredential.class.getName(), credential);
          credentialFound = true;
        }
      }
      if (!credentialFound) {
        throw new WebServiceException(
            WSManagedConnectionFactory.UTIL.getString("no_gss_credential")); // $NON-NLS-1$
      }
    } else if (this.mcf.getAsSecurityType() == WSManagedConnectionFactory.SecurityType.OAuth) {
      boolean credentialFound = false;
      Subject subject = ConnectionContext.getSubject();
      if (subject != null) {
        OAuthCredential credential =
            ConnectionContext.getSecurityCredential(subject, OAuthCredential.class);
        if (credential != null) {
          dispatch.getRequestContext().put(OAuthCredential.class.getName(), credential);
          credentialFound = true;
        }
      }
      if (!credentialFound) {
        throw new WebServiceException(
            WSManagedConnectionFactory.UTIL.getString("no_oauth_credential")); // $NON-NLS-1$
      }
    }

    if (this.mcf.getRequestTimeout() != null) {
      dispatch.getRequestContext().put(RECEIVE_TIMEOUT, this.mcf.getRequestTimeout());
    }
    if (this.mcf.getConnectTimeout() != null) {
      dispatch.getRequestContext().put(CONNECTION_TIMEOUT, this.mcf.getConnectTimeout());
    }

    if (HTTPBinding.HTTP_BINDING.equals(binding)) {
      Map<String, List<String>> httpHeaders =
          (Map<String, List<String>>)
              dispatch.getRequestContext().get(MessageContext.HTTP_REQUEST_HEADERS);
      if (httpHeaders == null) {
        httpHeaders = new HashMap<String, List<String>>();
      }
      httpHeaders.put(
          "Content-Type",
          Collections.singletonList("text/xml; charset=utf-8")); // $NON-NLS-1$ //$NON-NLS-2$
      httpHeaders.put(
          "User-Agent", Collections.singletonList("Teiid Server")); // $NON-NLS-1$ //$NON-NLS-2$
      dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, httpHeaders);
    }
  }