001: /* Copyright 2001 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.security.provider;
007:
008: import org.jasig.portal.security.ISecurityContext;
009: import org.jasig.portal.security.PortalSecurityException;
010: import org.apache.commons.logging.Log;
011: import org.apache.commons.logging.LogFactory;
012:
013: /**
014: * Create a security context and store the value of remote user. If not null,
015: * the user has authenticated.
016: *@author Pete Boysen, pboysen@iastate.edu
017: *@created November 17, 2002
018: *@version $Revision: 42068 $
019: */
020: class RemoteUserSecurityContext extends ChainingSecurityContext
021: implements ISecurityContext {
022:
023: private static final Log log = LogFactory
024: .getLog(RemoteUserSecurityContext.class);
025:
026: private final static int REMOTEUSERSECURITYAUTHTYPE = 0xFF31;
027: private String remoteUser;
028:
029: /**
030: * Constructor for the RemoteUserSecurityContext object. Store the
031: * value of user for authentication.
032: */
033: RemoteUserSecurityContext() {
034: this (null);
035: }
036:
037: /**
038: * Constructor for the RemoteUserSecurityContext object. Store the
039: * value of user for authentication.
040: *
041: * @param user Description of the Parameter
042: */
043: RemoteUserSecurityContext(String user) {
044: super ();
045: remoteUser = user;
046: }
047:
048: /**
049: * Gets the authType attribute of the RemoteUserSecurityContext object
050: *
051: *@return The authType value
052: */
053: public int getAuthType() {
054: return REMOTEUSERSECURITYAUTHTYPE;
055: }
056:
057: /**
058: * Verify that remoteUser is not null and set the principal's UID to this
059: * value.
060: *
061: * @exception PortalSecurityException
062: */
063: public synchronized void authenticate()
064: throws PortalSecurityException {
065: if (this .remoteUser != null) {
066: // Set the UID for the principal
067: this .myPrincipal.setUID(this .remoteUser);
068:
069: // Check that the principal UID matches the remote user
070: final String newUid = this .myPrincipal.getUID();
071:
072: if (this .remoteUser.equals(newUid)) {
073: if (log.isInfoEnabled()) {
074: log.info("Authentication REMOTE_USER("
075: + this .remoteUser + ").");
076: }
077:
078: this .isauth = true;
079: } else if (log.isInfoEnabled()) {
080: log.info("Authentication failed. REMOTE_USER("
081: + this .remoteUser + ") != user(" + newUid
082: + ").");
083: }
084: } else if (log.isInfoEnabled()) {
085: log.info("Authentication failed. REMOTE_USER not set for("
086: + this .myPrincipal.getUID() + ").");
087: }
088:
089: super .authenticate();
090: return;
091: }
092:
093: /**
094: * Set the remote user for this security context.
095: *
096: * @param remoteuser the REMOTE_USER environment variable.
097: */
098: public void setRemoteUser(String remoteUser) {
099: this.remoteUser = remoteUser;
100: }
101: }
|