All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.geode.internal.security.SecurityService Maven / Gradle / Ivy

Go to download

Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing

There is a newer version: 1.15.1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License. You may obtain a
 * copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package org.apache.geode.internal.security;

import org.apache.geode.internal.ClassLoadUtil;
import org.apache.geode.management.internal.security.ResourceConstants;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.GemFireSecurityException;
import org.apache.geode.security.PostProcessor;
import org.apache.geode.security.ResourcePermission;
import org.apache.geode.security.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadState;

import java.lang.reflect.Method;
import java.util.Properties;
import java.util.concurrent.Callable;

public interface SecurityService {

  ThreadState bindSubject(Subject subject);

  Subject getSubject();

  Subject login(Properties credentials);

  Subject login(String username, String password);

  void logout();

  Callable associateWith(Callable callable);

  void authorize(ResourceOperation resourceOperation);

  void authorizeClusterManage();

  void authorizeClusterWrite();

  void authorizeClusterRead();

  void authorizeDataManage();

  void authorizeDataWrite();

  void authorizeDataRead();

  void authorizeRegionManage(String regionName);

  void authorizeRegionManage(String regionName, String key);

  void authorizeRegionWrite(String regionName);

  void authorizeRegionWrite(String regionName, String key);

  void authorizeRegionRead(String regionName);

  void authorizeRegionRead(String regionName, String key);

  void authorize(String resource, String operation);

  void authorize(String resource, String operation, String regionName);

  void authorize(String resource, String operation, String regionName, String key);

  void authorize(ResourcePermission context);

  void initSecurity(Properties securityProps);

  void close();

  boolean needPostProcess();

  Object postProcess(String regionPath, Object key, Object value, boolean valueIsSerialized);

  Object postProcess(Object principal, String regionPath, Object key, Object value,
      boolean valueIsSerialized);

  boolean isClientSecurityRequired();

  boolean isIntegratedSecurity();

  boolean isPeerSecurityRequired();

  SecurityManager getSecurityManager();

  void setSecurityManager(SecurityManager securityManager);

  PostProcessor getPostProcessor();

  void setPostProcessor(PostProcessor postProcessor);

  /**
   * this method would never return null, it either throws an exception or returns an object
   */
  public static  T getObjectOfTypeFromClassName(String className, Class expectedClazz) {
    Class actualClass = null;
    try {
      actualClass = ClassLoadUtil.classFromName(className);
    } catch (Exception ex) {
      throw new GemFireSecurityException("Instance could not be obtained, " + ex.toString(), ex);
    }

    if (!expectedClazz.isAssignableFrom(actualClass)) {
      throw new GemFireSecurityException(
          "Instance could not be obtained. Expecting a " + expectedClazz.getName() + " class.");
    }

    T actualObject = null;
    try {
      actualObject = (T) actualClass.newInstance();
    } catch (Exception e) {
      throw new GemFireSecurityException(
          "Instance could not be obtained. Error instantiating " + actualClass.getName(), e);
    }
    return actualObject;
  }

  /**
   * this method would never return null, it either throws an exception or returns an object
   */
  public static  T getObjectOfTypeFromFactoryMethod(String factoryMethodName,
      Class expectedClazz) {
    T actualObject = null;
    try {
      Method factoryMethod = ClassLoadUtil.methodFromName(factoryMethodName);
      actualObject = (T) factoryMethod.invoke(null, (Object[]) null);
    } catch (Exception e) {
      throw new GemFireSecurityException("Instance could not be obtained from " + factoryMethodName,
          e);
    }

    if (actualObject == null) {
      throw new GemFireSecurityException(
          "Instance could not be obtained from " + factoryMethodName);
    }

    return actualObject;
  }

  /**
   * this method would never return null, it either throws an exception or returns an object
   *
   * @return an object of type expectedClazz. This method would never return null. It either returns
   *         an non-null object or throws exception.
   */
  public static  T getObjectOfType(String classOrMethod, Class expectedClazz) {
    T object = null;
    try {
      object = getObjectOfTypeFromClassName(classOrMethod, expectedClazz);
    } catch (Exception e) {
      object = getObjectOfTypeFromFactoryMethod(classOrMethod, expectedClazz);
    }
    return object;
  }

  public static Properties getCredentials(Properties securityProps) {
    Properties credentials = null;
    if (securityProps.containsKey(ResourceConstants.USER_NAME)
        && securityProps.containsKey(ResourceConstants.PASSWORD)) {
      credentials = new Properties();
      credentials.setProperty(ResourceConstants.USER_NAME,
          securityProps.getProperty(ResourceConstants.USER_NAME));
      credentials.setProperty(ResourceConstants.PASSWORD,
          securityProps.getProperty(ResourceConstants.PASSWORD));
    }
    return credentials;
  }

  static SecurityService getSecurityService() {
    return IntegratedSecurityService.getSecurityService();
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy