123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /**
- * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
- */
- package com.jeeplus.common.security.shiro.cache;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.Set;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.UnavailableSecurityManagerException;
- import org.apache.shiro.cache.Cache;
- import org.apache.shiro.cache.CacheException;
- import org.apache.shiro.cache.CacheManager;
- import org.apache.shiro.session.InvalidSessionException;
- import org.apache.shiro.session.Session;
- import org.apache.shiro.subject.Subject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.google.common.collect.Sets;
- import com.jeeplus.common.web.Servlets;
- /**
- * 自定义授权缓存管理类
- * @author jeeplus
- * @version 2014-7-21
- */
- public class SessionCacheManager implements CacheManager {
- @Override
- public <K, V> Cache<K, V> getCache(String name) throws CacheException {
- return new SessionCache<K, V>(name);
- }
- /**
- * SESSION缓存管理类
- */
- public class SessionCache<K, V> implements Cache<K, V> {
- private Logger logger = LoggerFactory.getLogger(getClass());
-
- private String cacheKeyName = null;
- public SessionCache(String cacheKeyName) {
- this.cacheKeyName = cacheKeyName;
- }
-
- public Session getSession(){
- Session session = null;
- try{
- Subject subject = SecurityUtils.getSubject();
- session = subject.getSession(false);
- if (session == null){
- session = subject.getSession();
- }
- }catch (InvalidSessionException e){
- logger.error("Invalid session error", e);
- }catch (UnavailableSecurityManagerException e2){
- logger.error("Unavailable SecurityManager error", e2);
- }
- return session;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public V get(K key) throws CacheException {
- if (key == null){
- return null;
- }
-
- V v = null;
- HttpServletRequest request = Servlets.getRequest();
- if (request != null){
- v = (V)request.getAttribute(cacheKeyName);
- if (v != null){
- return v;
- }
- }
-
- V value = null;
- value = (V)getSession().getAttribute(cacheKeyName);
- logger.debug("get {} {} {}", cacheKeyName, key, request != null ? request.getRequestURI() : "");
-
- if (request != null && value != null){
- request.setAttribute(cacheKeyName, value);
- }
- return value;
- }
- @Override
- public V put(K key, V value) throws CacheException {
- if (key == null){
- return null;
- }
- getSession().setAttribute(cacheKeyName, value);
-
- if (logger.isDebugEnabled()){
- HttpServletRequest request = Servlets.getRequest();
- logger.debug("put {} {} {}", cacheKeyName, key, request != null ? request.getRequestURI() : "");
- }
-
- return value;
- }
- @SuppressWarnings("unchecked")
- @Override
- public V remove(K key) throws CacheException {
-
- V value = null;
- value = (V)getSession().removeAttribute(cacheKeyName);
- logger.debug("remove {} {}", cacheKeyName, key);
-
- return value;
- }
- @Override
- public void clear() throws CacheException {
- getSession().removeAttribute(cacheKeyName);
- logger.debug("clear {}", cacheKeyName);
- }
- @Override
- public int size() {
- logger.debug("invoke session size abstract size method not supported.");
- return 0;
- }
- @Override
- public Set<K> keys() {
- logger.debug("invoke session keys abstract size method not supported.");
- return Sets.newHashSet();
- }
- @Override
- public Collection<V> values() {
- logger.debug("invoke session values abstract size method not supported.");
- return Collections.emptyList();
- }
- }
- }
|