defaultservicesmanagerimpl.java

来自「CAS在Tomcat中实现单点登录项目,单点登录(Single Sign On 」· Java 代码 · 共 129 行

JAVA
129
字号
/* * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license * distributed with this file and available online at * http://www.uportal.org/license.html */package org.jasig.cas.services;import java.util.Collection;import java.util.Collections;import java.util.concurrent.ConcurrentHashMap;import org.jasig.cas.authentication.principal.Service;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.Assert;/** * Default implementation of the {@link ServicesManager} interface. If there are * no services registered with the server, it considers the ServicecsManager * disabled and will not prevent any service from using CAS. *  * @author Scott Battaglia * @version $Revision: 42135 $ $Date: 2007-06-20 08:07:33 -0400 (Wed, 20 Jun 2007) $ * @since 3.1 */public final class DefaultServicesManagerImpl implements ReloadableServicesManager {    /** Instance of ServiceRegistryDao. */    private ServiceRegistryDao serviceRegistryDao;    /** Map to store all services. */    private ConcurrentHashMap<Long, RegisteredService> services = new ConcurrentHashMap<Long, RegisteredService>();    /** Default service to return if none have been registered. */    private RegisteredService disabledRegisteredService;        public DefaultServicesManagerImpl(        final ServiceRegistryDao serviceRegistryDao) {        Assert            .notNull(serviceRegistryDao, "serviceRegistryDao cannot be null.");        this.serviceRegistryDao = serviceRegistryDao;        this.disabledRegisteredService = constructDefaultRegisteredService();                load();    }    @Transactional(readOnly = false)    public synchronized RegisteredService delete(final long id) {        final RegisteredService r = findServiceBy(id);        if (r == null) {            return null;        }                this.serviceRegistryDao.delete(r);        this.services.remove(new Long(id));                return r;    }    /**     * Note, if the repository is empty, this implementation will return a default service to grant all access.     * <p>     * This preserves default CAS behavior.     */    public RegisteredService findServiceBy(final Service service) {        final Collection<RegisteredService> c = this.services.values();                if (c.isEmpty()) {            return this.disabledRegisteredService;        }        for (final RegisteredService r : c) {            if (r.matches(service)) {                return r;            }        }        return null;    }    public RegisteredService findServiceBy(final long id) {        final RegisteredService r = this.services.get(new Long(id));                try {            return r == null ? null : (RegisteredService) r.clone();        } catch (final CloneNotSupportedException e) {            return r;        }    }    public Collection<RegisteredService> getAllServices() {        return Collections.unmodifiableCollection(this.services.values());    }    public boolean matchesExistingService(final Service service) {        return findServiceBy(service) != null;    }    @Transactional(readOnly = false)    public synchronized void save(final RegisteredService registeredService) {        final RegisteredService r = this.serviceRegistryDao.save(registeredService);        this.services.put(new Long(r.getId()), r);    }        public void reload() {        load();    }        private void load() {        final ConcurrentHashMap<Long, RegisteredService> localServices = new ConcurrentHashMap<Long, RegisteredService>();                        for (final RegisteredService r : this.serviceRegistryDao.load()) {            localServices.put(new Long(r.getId()), r);        }                this.services = localServices;    }        private RegisteredService constructDefaultRegisteredService() {        final RegisteredServiceImpl r = new RegisteredServiceImpl();        r.setAllowedToProxy(true);        r.setAnonymousAccess(false);        r.setEnabled(true);        r.setSsoEnabled(true);                return r;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?