Package com.ettrema.sso

Source Code of com.ettrema.sso.SsoResourceFactory

package com.ettrema.sso;

import com.bradmcevoy.common.Path;
import com.bradmcevoy.http.HttpManager;
import com.bradmcevoy.http.Resource;
import com.bradmcevoy.http.ResourceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This class is intended to be used with the SsoAuthenticationHandler to provide
* path based authentication.
*
* For example, if a user logs in via a web page and there session id is ABC123,
* they might be able to edit documents in MS Word without being challenged for
* a login on a path like /ABC123/mydoc.doc
*
* To use this class, you should use it to wrap your existing resource factory. Eg
*
*  MyResourceFactory rf = new MyResourceFactory();
*  SsoResourceFactory ssoRf = new SsoResourceFactory(rf);
*
* And then connect ssoRf to the HttpManager like this:
*
*   HttpManager hm = new HttpManager(ssoRf);
*
* URL's which do not relate to SSO will be delegated to the wrapped resource factory.
*
* When a SSO request is received, this resource factory will use the adapted path
* to locate a resource with the wrapped resource factory.
*
* @author brad
*/
public class SsoResourceFactory implements ResourceFactory {

  private static final Logger log = LoggerFactory.getLogger(SsoResourceFactory.class);
 

  private final ResourceFactory resourceFactory;
 
  private final SsoSessionProvider ssoSessionProvider;

  public SsoResourceFactory(ResourceFactory resourceFactory, SsoSessionProvider ssoSessionProvider) {
    this.resourceFactory = resourceFactory;
    this.ssoSessionProvider = ssoSessionProvider;
  }


  public Resource getResource(String host, String url) {
    Path p = Path.path(url);
    String firstComp = p.getFirst();
    Object oUserTag = null;
    if( firstComp != null ) {
      oUserTag = ssoSessionProvider.getUserTag(firstComp);
    }
   
    if (oUserTag == null) {
      log.trace("not a SSO path");
      return resourceFactory.getResource(host, url);
    } else {
      log.trace("is an SSO path");
      Path strippedPath = p.getStripFirst();
      HttpManager.request().getAttributes().put("_sso_user", oUserTag);
      return resourceFactory.getResource(host, strippedPath.toString());
    }
  }

 
}
TOP

Related Classes of com.ettrema.sso.SsoResourceFactory

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.