package com.casic.missiles.config; // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // import com.casic.missiles.config.properties.CasicProperties; import com.casic.missiles.core.filter.UserLoginFilter; import com.casic.missiles.core.listener.ShiroSessionListener; import com.casic.missiles.core.shiro.ShiroDbRealm; import com.casic.missiles.core.shiro.ShiroSessionManager; import com.casic.missiles.core.shiro.dao.RedisSessionDao; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.servlet.Filter; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.codec.Base64; import org.apache.shiro.session.SessionListener; import org.apache.shiro.session.mgt.SessionManager; import org.apache.shiro.spring.LifecycleBeanPostProcessor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.CookieRememberMeManager; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.servlet.Cookie; import org.apache.shiro.web.servlet.SimpleCookie; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.data.redis.core.RedisTemplate; @Configuration @DependsOn({"springContextHolder"}) public class ShiroConfigs { public ShiroConfigs() { } @Bean public DefaultWebSecurityManager securityManager(CacheManager cacheShiroManager, SessionManager sessionManager) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(this.shiroDbRealm()); securityManager.setCacheManager(cacheShiroManager); securityManager.setSessionManager(sessionManager); return securityManager; } @Bean @ConditionalOnProperty( prefix = "casic", name = {"spring-session-open"}, havingValue = "true" ) public DefaultWebSessionManager servletContainerSessionManager(@Autowired(required = false) RedisTemplate redisTemplate, CasicProperties casicProperties, SessionListener sessionListener, @Value("${spring.redis.redisValueSerializer:org.springframework.data.redis.serializer.StringRedisSerializer}") String redisValueSerializer) { DefaultWebSessionManager sessionManager = new ShiroSessionManager(); sessionManager.setSessionDAO(new RedisSessionDao((long)(casicProperties.getSessionInvalidateTime() * 1000), redisTemplate, redisValueSerializer)); sessionManager.setSessionValidationInterval((long)(casicProperties.getSessionValidationInterval() * 1000)); sessionManager.setGlobalSessionTimeout((long)(casicProperties.getSessionInvalidateTime() * 1000)); sessionManager.setDeleteInvalidSessions(true); sessionManager.setSessionValidationSchedulerEnabled(true); Cookie cookie = new SimpleCookie("JSESSIONID"); cookie.setName("shiroCookie"); cookie.setHttpOnly(true); sessionManager.setSessionIdCookie(cookie); List<SessionListener> listeners = new ArrayList(); listeners.add(sessionListener); sessionManager.setSessionListeners(listeners); return sessionManager; } @Bean @ConditionalOnProperty( prefix = "casic", name = {"spring-session-open"}, havingValue = "false" ) public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, CasicProperties CasicProperties, SessionListener sessionListener) { DefaultWebSessionManager sessionManager = new ShiroSessionManager(); sessionManager.setCacheManager(cacheShiroManager); sessionManager.setSessionValidationInterval((long)(CasicProperties.getSessionValidationInterval() * 1000)); sessionManager.setGlobalSessionTimeout((long)(CasicProperties.getSessionInvalidateTime() * 1000)); sessionManager.setDeleteInvalidSessions(true); sessionManager.setSessionValidationSchedulerEnabled(true); Cookie cookie = new SimpleCookie("JSESSIONID"); cookie.setName("shiroCookie"); cookie.setHttpOnly(true); sessionManager.setSessionIdCookie(cookie); List<SessionListener> listeners = new ArrayList(); listeners.add(sessionListener); sessionManager.setSessionListeners(listeners); return sessionManager; } @Bean public SessionListener defaultSessionListener() { return new ShiroSessionListener(); } @Bean public ShiroDbRealm shiroDbRealm() { return new ShiroDbRealm(); } @Bean public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) { CookieRememberMeManager manager = new CookieRememberMeManager(); manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA==")); manager.setCookie(rememberMeCookie); return manager; } @Bean public SimpleCookie rememberMeCookie() { SimpleCookie simpleCookie = new SimpleCookie("rememberMe"); simpleCookie.setHttpOnly(true); simpleCookie.setMaxAge(604800); return simpleCookie; } @Bean public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager, CasicProperties CasicProperties) { LoggerFactory.getLogger(this.getClass()).info("bili bili!! Talk is cheap,Show me the code!"); ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); shiroFilter.setLoginUrl("/sys/user/login"); shiroFilter.setSuccessUrl(CasicProperties.getSuccessUrl()); shiroFilter.setUnauthorizedUrl("/global/error"); HashMap<String, Filter> myFilters = new HashMap(); myFilters.put("user", new UserLoginFilter(CasicProperties)); shiroFilter.setFilters(myFilters); Map<String, String> hashMap = new LinkedHashMap(); hashMap.put("/static/**", "anon"); hashMap.put("/doc.html", "anon"); hashMap.put("/swagger-resources/**", "anon"); hashMap.put("/v2/api-docs", "anon"); hashMap.put("/v2/api-docs-ext", "anon"); hashMap.put("/webjars/**", "anon"); Iterator var6 = CasicProperties.getNoLoginUrls().iterator(); while(var6.hasNext()) { String url = (String)var6.next(); hashMap.put(url, "anon"); } hashMap.put("/**", "user"); shiroFilter.setFilterChainDefinitionMap(hashMap); return shiroFilter; } @Bean public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) { MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean(); bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager"); bean.setArguments(new Object[]{securityManager}); return bean; } @Bean public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) { AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); return authorizationAttributeSourceAdvisor; } }