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 + -
显示快捷键?