/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.internal.security.common.authorization; import java.security.Permissions; import java.security.Principal; import javax.security.auth.Subject; import org.eclipse.riena.core.cache.GenericObjectCache; import org.eclipse.riena.core.util.ContainerModel; import org.eclipse.riena.core.wire.InjectExtension; import org.eclipse.riena.security.common.authorization.IPermissionCache; public class PermissionCache implements IPermissionCache { private final GenericObjectCache<String, Permissions> permCache = new GenericObjectCache<String, Permissions>(); public PermissionCache() { super(); permCache.setName("PermissionCache"); //$NON-NLS-1$ if (ContainerModel.isClient()) { permCache.setMinimumSize(1); permCache.setTimeout(999999000); // client permissions nearly // never timeout } else { permCache.setMinimumSize(100); permCache.setTimeout(360000); } } public Permissions getPermissions(final Principal principal) { return permCache.get(principal.getName()); } public void putPermissions(final Principal principal, final Permissions permissions) { permCache.put(principal.getName(), permissions); } public void purgePermissions(final Subject subject) { } public void purgePermissions(final Principal principal) { } @InjectExtension(min = 0, max = 1) public void update(final IPermissionCacheExtension permissionCacheExtension) { if (permissionCacheExtension != null) { permCache.setMinimumSize(permissionCacheExtension.getMinimumSize()); final int timeout = permissionCacheExtension.getTimeout(); permCache.setTimeout(timeout == -1 ? Integer.MAX_VALUE : timeout); } } }