org.killbill.billing.util.glue.RedisShiroManagerProvider Maven / Gradle / Ivy
/*
* Copyright 2014-2018 Groupon, Inc
* Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project 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.killbill.billing.util.glue;
import javax.cache.CacheManager;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.mgt.SubjectDAO;
import org.killbill.commons.metrics.api.MetricRegistry;
import org.redisson.api.RedissonClient;
import static org.killbill.billing.util.glue.CacheModule.REDIS_CACHE_CLIENT;
public class RedisShiroManagerProvider implements Provider {
private final SecurityManager securityManager;
private final SubjectDAO subjectDAO;
private final CacheManager eh107CacheManager;
private final MetricRegistry metricRegistry;
private final RedissonClient redissonClient;
@Inject
public RedisShiroManagerProvider(final SecurityManager securityManager,
final SubjectDAO subjectDAO,
final CacheManager eh107CacheManager,
final MetricRegistry metricRegistry,
@Named(REDIS_CACHE_CLIENT) final RedissonClient redissonClient) {
this.securityManager = securityManager;
this.subjectDAO = subjectDAO;
this.eh107CacheManager = eh107CacheManager;
this.metricRegistry = metricRegistry;
this.redissonClient = redissonClient;
}
@Override
public RedisShiroManager get() {
// Same Redis manager instance as the rest of the system
final RedisShiroManager shiroRedisManager = new RedisShiroManager(eh107CacheManager, metricRegistry, redissonClient);
if (securityManager instanceof DefaultSecurityManager) {
// For RBAC only (see also KillbillJdbcTenantRealmProvider)
final DefaultSecurityManager securityManager = (DefaultSecurityManager) this.securityManager;
securityManager.setCacheManager(shiroRedisManager);
securityManager.setSubjectDAO(subjectDAO);
}
return shiroRedisManager;
}
}