AMSDKEventListener.java revision 8d3140b524c0e28c0a49dc7c7d481123ef3cfe11
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * The contents of this file are subject to the terms
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * of the Common Development and Distribution License
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * (the License). You may not use this file except in
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * compliance with the License.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * You can obtain a copy of the License at
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * https://opensso.dev.java.net/public/CDDLv1.0.html or
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * opensso/legal/CDDLv1.0.txt
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * See the License for the specific language governing
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * permission and limitations under the License.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * When distributing Covered Code, include this CDDL
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Header Notice in each file and include the License file
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * at opensso/legal/CDDLv1.0.txt.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * If applicable, add the following below the CDDL Header,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * with the fields enclosed by brackets [] replaced by
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * your own identifying information:
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * "Portions Copyrighted [year] [name of copyright owner]"
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * $Id: AMSDKEventListener.java,v 1.6 2008/08/19 19:08:51 veiming Exp $
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkpackage com.sun.identity.authentication.config;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.iplanet.am.sdk.AMEvent;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.iplanet.am.sdk.AMEventListener;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.iplanet.am.sdk.AMObject;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.sun.identity.shared.debug.Debug;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport javax.security.auth.login.Configuration;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Implements <code>AMEventListener</code> from OpenAM SDK. This
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * listens to authentication configuration changes for users and roles
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkpublic class AMSDKEventListener implements AMEventListener {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private static Debug debug = Debug.getInstance("amAuthConfig");
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private String configName = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private AMObject amObject = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Constructor.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param name Authentication configuration name
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public AMSDKEventListener(String name) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk configName = name;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Returns configuration name.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @return configuration name.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public String getConfigName() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return configName;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Implements <code>com.iplanet.am.sdk.AMEventListener</code>.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param event
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @see com.iplanet.am.sdk.AMEventListener#objectChanged
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public void objectChanged(AMEvent event) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (event == null) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.error("AMConfiguration.objectChanged, event null");
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // do nothing
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (debug.messageEnabled()) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.message("objectChanged, type=" + event.getEventType() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sDN=" + event.getSourceDN() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sType=" + event.getSourceType());
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // process object change
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk processSDKNotification();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Implements <code>com.iplanet.am.sdk.AMEventListener</code>.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param event AM event
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @see com.iplanet.am.sdk.AMEventListener#objectRemoved
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public void objectRemoved(AMEvent event) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (event == null) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.error("AMConfiguration.objectChanged, event null");
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // do nothing
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (debug.messageEnabled()) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.message("objectRemoved, type=" + event.getEventType() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sDN=" + event.getSourceDN() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sType=" + event.getSourceType());
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // process object change
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk processSDKNotification();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Implements <code>com.iplanet.am.sdk.AMEventListener</code>.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param event AM event
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @see com.iplanet.am.sdk.AMEventListener#objectRenamed
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public void objectRenamed(AMEvent event) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (event == null) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.error("AMConfiguration.objectChanged, event null");
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // do nothing
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (debug.messageEnabled()) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.message("objectRenamed, type=" + event.getEventType() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sDN=" + event.getSourceDN() +
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ", sType=" + event.getSourceType());
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // process object change
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk processSDKNotification();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Processes SDK notification for an entry, this method will go ahead to
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * remove the corresponding config entry affected by the change. So when
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * a new request comes, it will get the upto date authentication
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * configuration.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private void processSDKNotification() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk try {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if (debug.messageEnabled()) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.message("processSDKNotification name=" + configName);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ((AMConfiguration)Configuration.getConfiguration())
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk .processListenerEvent(configName);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } catch (Exception e) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk debug.error("processSDKNotification", e);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Returns object to be listened.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @return object to be listened.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public AMObject getListenedObject() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return amObject;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Sets listened object.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param object Object to listen to.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public void setListenedObject(AMObject object) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk amObject = object;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk}
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk