import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO; //导入依赖的package包/类
@Override
public boolean initialize(SilentGo me) throws AppBuildException {
ShiroConfig config = (ShiroConfig) me.getConfig().getConfig(Name);
me.getFactory(CacheFactory.class);
PropKit prop = me.getConfig().getUserProp();
RetryLimitHashedCredentialsMatcher retryLimitHashedCredentialsMatcher = new RetryLimitHashedCredentialsMatcher();
retryLimitHashedCredentialsMatcher.setHashAlgorithmName(prop.getValue(Dict.SHIRO_CREDENTIALS_MATCHER_HASHALGORITHMNAME, "md5"));
retryLimitHashedCredentialsMatcher.setHashIterations(prop.getInt(Dict.SHIRO_CREDENTIALS_MATCHER_HASHITERATIONS, 2));
retryLimitHashedCredentialsMatcher.setStoredCredentialsHexEncoded(prop.getBool(Dict.SHIRO_CREDENTIALS_MATCHER_STOREDCREDENTIALSHEXENCODED, true));
EhCacheManager ehCacheManager = new EhCacheManager();
EhCache cache = (EhCache) me.getConfig().getCacheManager();
ehCacheManager.setCacheManager(cache.getCacheManager());
JavaUuidSessionIdGenerator sessionIdGenerator = new JavaUuidSessionIdGenerator();
SimpleCookie sessionIdCookie = new SimpleCookie(prop.getValue(Dict.SHIRO_SESSION_COOKIENAME, "lc4e"));
sessionIdCookie.setMaxAge(prop.getInt(Dict.SHIRO_SESSION_IDCOOKIE_MAXAGE, -1));
sessionIdCookie.setHttpOnly(prop.getBool(Dict.SHIRO_SESSION_IDCOOKIE_HTTPONLY, true));
SimpleCookie rememberMeCookie = new SimpleCookie(prop.getValue(Dict.SHIRO_SESSION_REMEMBER_COOKIENAME, "rlc4e"));
rememberMeCookie.setHttpOnly(prop.getBool(Dict.SHIRO_SESSION_REMEMBER_ME_HTTPONLY, true));
rememberMeCookie.setMaxAge(prop.getInt(Dict.SHIRO_SESSION_REMEMBER_ME_MAXAGE, 2592000));
CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();
rememberMeManager.setCipherKey(Base64.decode(prop.getValue(Dict.SECURITY_KEY, "4AvVhmFLUs0KTA3Kprsdag==")));
rememberMeManager.setCookie(rememberMeCookie);
EnterpriseCacheSessionDAO sessionDAO = new EnterpriseCacheSessionDAO();
sessionDAO.setActiveSessionsCacheName(prop.getValue(Dict.SHIRO_SESSION_ACTIVE_NAME, "shiro-activeSessionCache"));
sessionDAO.setSessionIdGenerator(sessionIdGenerator);
sessionDAO.setCacheManager(ehCacheManager);
config.getRealm().setCredentialsMatcher(retryLimitHashedCredentialsMatcher);
config.getRealm().setCachingEnabled(false);
config.getRealm().setCacheManager(ehCacheManager);
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionValidationScheduler = new QuartzSessionValidationScheduler(sessionManager);
sessionValidationScheduler.setSessionValidationInterval(prop.getLong(Dict.SHIRO_SESSION_VALIDATIONINTERVAL, 1800000L));
sessionManager.setGlobalSessionTimeout(prop.getLong(Dict.SHIRO_SESSION_GLOBALSESSIONTIMEOUT, 1800000L));
sessionManager.setSessionDAO(sessionDAO);
sessionManager.setSessionValidationInterval(prop.getLong(Dict.SHIRO_SESSION_VALIDATIONINTERVAL, 360000L));
sessionManager.setSessionValidationScheduler(sessionValidationScheduler);
sessionManager.setSessionIdCookieEnabled(prop.getBool(Dict.SHIRO_SESSION_IDCOOKIEENABLED, true));
sessionManager.setSessionIdCookie(sessionIdCookie);
sessionValidationScheduler.setSessionManager(sessionManager);
defaultWebSecurityManager = new DefaultWebSecurityManager(config.getRealm());
defaultWebSecurityManager.setCacheManager(ehCacheManager);
defaultWebSecurityManager.setRememberMeManager(rememberMeManager);
defaultWebSecurityManager.setSessionManager(sessionManager);
ServletContext servletContext = me.getContext();
ShiroLoader shiroLoader = new ShiroLoader();
shiroLoader.initEnvironment(servletContext);
WebEnvironment environment = (WebEnvironment) servletContext.getAttribute(ShiroLoader.ENVIRONMENT_ATTRIBUTE_KEY);
((MutableWebEnvironment) environment).setWebSecurityManager(defaultWebSecurityManager);
servletContext.setAttribute(ShiroLoader.ENVIRONMENT_ATTRIBUTE_KEY, environment);
return false;
}