Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.picketlink.trust.jbossws.handler;
 
 import  org.jboss.security.SecurityConstants;
 
 import  javax.servlet.ServletContext;
 import java.util.Set;

Abstract base class for the PicketLink Trust Handlers

This class implements directly the SOAPHandler interface because the org.jboss.wsf.common.handler.GenericSOAPHandler package name changes between JBossWS versions.

Author(s):
Anil.Saldhana@redhat.com
Pedro Silva
Since:
Apr 11, 2011
 
 @SuppressWarnings("rawtypes")
 public abstract class AbstractPicketLinkTrustHandler<C extends LogicalMessageContextimplements SOAPHandler {
 
     protected static final PicketLinkLogger logger = PicketLinkLoggerFactory.getLogger();
 
     protected static Set<QNameheaders;
 
     protected static final String SEC_MGR_LOOKUP = SecurityConstants.JAAS_CONTEXT_ROOT;
     protected static final String AUTHZ_MGR_LOOKUP = "java:comp/env/security/authorizationMgr";
 
     private String securityDomainName;
 
     static {
         HashSet<QNameset = new HashSet<QName>();
         set.add(.);
          = Collections.unmodifiableSet(set);
     }
 
     public Set<QNamegetHeaders() {
         // return a collection with just the wsse:Security header to pass the MustUnderstand check on it
         return ;
     }

    

Utility method to get the ServletContext from the specified MessageContext.

Parameters:
msgContext
Returns:
 
     protected ServletContext getServletContext(MessageContext msgContext) {
         return (ServletContext) msgContext.get(.);
     }

    

Returns the security domain name configured for the deployment.

Parameters:
msgContext
Returns:
Throws:
ConfigurationException if no security domain is configured.
    protected String getSecurityDomainName(MessageContext msgContextthrows ConfigurationException {
        if (this. == null) {
            InputStream is = null;
            try {
                is = getJBossWeb(getServletContext(msgContext));
                if (is != null) {
                    Document document = DocumentUtil.getDocument(is);
                     = DocumentUtil.getChildElement(document.getDocumentElement(),
                            new javax.xml.namespace.QName("security-domain")).getTextContent();
                }
            } catch (Exception e) {
            } finally {
                try {
                    if (is != null) {
                        is.close();
                    }
                } catch (IOException e) {
                }
            }
        }
        if (this. == null) {
            throw .securityDomainNotFound();
        }
        return this.;
    }

    

Returns a InputStream for the jboss-web.xml configuration file.

Parameters:
context
Returns:
    private InputStream getJBossWeb(ServletContext context) {
        if (context == null)
            throw .nullValueError("Servlet Context");
        return context.getResourceAsStream("/WEB-INF/jboss-web.xml");
    }


    
Given a Document, create the WSSE element

Parameters:
document
Returns:
    protected Element getSecurityHeaderElement(Document document) {
        Element element = document.createElementNS(..);
        Util.addNamespace(element..);
        Util.addNamespace(element..);
        return element;
    }
    protected void trace(MessageContext msgContext) {
        if (.isTraceEnabled()) {
            if (msgContext instanceof SOAPMessageContext) {
                SOAPMessageContext soapMessageContext = (SOAPMessageContextmsgContext;
                .trace("WSDL_PORT=" + soapMessageContext.get(.));
                .trace("WSDL_OPERATION=" + soapMessageContext.get(.));
                .trace("WSDL_INTERFACE=" + soapMessageContext.get(.));
                .trace("WSDL_SERVICE=" + soapMessageContext.get(.));
            }
        }
    }

    
Given the NameID Element, return the user name

Parameters:
nameID
Returns:
    protected String getUsername(final Element nameID) {
        String username = nameID.getNodeValue();
        if (username == null) {
            final NodeList childNodes = nameID.getChildNodes();
            final int size = childNodes.getLength();
            for (int i = 0; i < sizei++) {
                final Node childNode = childNodes.item(i);
                if (childNode.getNodeType() == .) {
                    username = childNode.getNodeValue();
                }
            }
        }
        return username;
    }

    
Get the SAML Assertion from the subject

Returns:
    protected Element getAssertionFromSubject() {
        Element assertion = null;
        Subject subject = SecurityActions.getAuthenticatedSubject();
        if (subject == null) {
            .trace("No authentication Subject found, cannot provide any user roles!");
            return assertion;
        }
        Set<Objectcreds = subject.getPublicCredentials();
        if (creds != null) {
            for (Object cred : creds) {
                if (cred instanceof SamlCredential) {
                    SamlCredential samlCredential = (SamlCredentialcred;
                    try {
                        assertion = samlCredential.getAssertionAsElement();
                    } catch (ProcessingException e) {
                        .samlAssertionPasingFailed(e);
                    }
                    break;
                }
            }
        }
        return assertion;
    }
    protected Object lookupJNDI(String str) {
        try {
            Context context = new InitialContext();
            return context.lookup(str);
        } catch (NamingException e) {
            throw new RuntimeException(e);
        }
    }

    

Handles the incoming message and decides which method should be called: handleOutbound or handleInbound

.

Parameters:
msgContext
Returns:
    public boolean handleMessage(MessageContext msgContext) {
        Boolean outbound = (Boolean)msgContext.get(.);
        if (outbound == null)
            throw new IllegalStateException("Cannot obtain required property: " + .);
        return outbound ? handleOutbound(msgContext) : handleInbound(msgContext);
    }
    protected boolean handleOutbound(MessageContext msgContext) {
        return true;
    }
    protected boolean handleInbound(MessageContext msgContext) {
        return true;
    }
    public boolean handleFault(MessageContext context) {
        return true;
    }
    public void close(MessageContext context) {
    }
New to GrepCode? Check out our FAQ X