2016-07-19 9 views
-1

セキュリティ実装のためにプロジェクトでApache shiroを使用しています。私はCDIを使ってセキュリティ領域を注入しました。私は、Jboss Infinispanを使ってshiroに認証と認証のキャッシングを実装したいと思っています。誰かがいくつかのポインタを共有してもらえますか?JBoss Infinspanを使ってApache Shiroでキャッシングを実装する

答えて

0

shiroでキャッシュを実装するには、org.apache.shiro.cache.Cacheとorg.apache.shiro.cache.CacheManagerを実装する必要があります。あなたがinfinispan使用したい場合は、次の手順を実行します。

はorg.apache.shiro.cache.Cache

import java.util.Collection; 
import java.util.Set; 

import org.apache.shiro.cache.Cache; 
import org.apache.shiro.cache.CacheException; 


public class InfinispanCache<K, V> implements Cache<K, V> { 


    private final org.infinispan.Cache<K, V> cacheProxy; 

    public InfinispanCache(final org.infinispan.Cache<K, V> cacheProxy) { 
     this.cacheProxy = cacheProxy; 
    } 


    @Override 
    public V get(final K key) throws CacheException { 
     return cacheProxy.get(key); 
    } 


    @Override 
    public V put(final K key, final V value) throws CacheException { 
     return cacheProxy.put(key, value); 
    } 


    @Override 
    public V remove(final K key) throws CacheException { 
     return cacheProxy.remove(key); 
    } 


    @Override 
    public void clear() throws CacheException { 
     cacheProxy.clear(); 
    } 


    @Override 
    public int size() { 
     return cacheProxy.size(); 
    } 


    @Override 
    public Set<K> keys() { 
     return cacheProxy.keySet(); 
    } 


    @Override 
    public Collection<V> values() { 
     return cacheProxy.values(); 
    } 

} 

がorg.apache.shiro.cache.CacheManager

import org.apache.shiro.cache.Cache; 
import org.apache.shiro.cache.CacheException; 
import org.apache.shiro.cache.CacheManager; 
import org.infinispan.manager.CacheContainer; 


public class InfinispanCacheManager implements CacheManager { 


    private final CacheContainer cacheContainer; 

    public InfinispanCacheManager(final CacheContainer cacheContainer) { 
     this.cacheContainer = cacheContainer; 
    } 

    @Override 
    @SuppressWarnings({ "rawtypes", "unchecked" }) 
    public <K, V> Cache<K, V> getCache(final String name) throws CacheException { 
     return new InfinispanCache(cacheContainer.getCache(name)); 
    } 

} 

ジェクトを実装する実装キャッシュコンテナ。あなたのレルムがCDIを有効にしている場合、これはうまくいくはずです。

import javax.annotation.Resource; 

/** The security cache manager. */ 
    @Resource(lookup = "java:jboss/infinispan/container/<YOUR CACHE CONTAINER NAME>") 
    private EmbeddedCacheManager securityCacheManager; 

は、レルムの実装では、あなたのキャッシュマネージャを設定します。

setCachingEnabled(true); 
setAuthenticationCachingEnabled(true); 
setAuthorizationCachingEnabled(true); 
setCacheManager(new InfinispanCacheManager(securityCacheManager)); 
setAuthenticationCacheName(authenticationCacheName); 
setAuthorizationCacheName(authorizationCacheName); 

を同様に、あなたは他のキャッシュframeworskと四郎にそれを実装することができます。

関連する問題