package com.landtool.lanbase.config; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.SessionListener; import org.apache.shiro.session.mgt.SessionKey; 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.DefaultWebSecurityManager; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.apache.shiro.web.session.mgt.WebSessionKey; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.landtool.lanbase.common.shiro.SessionWatcher; import com.landtool.lanbase.common.shiro.ShiroAuthenticatingFilter; import com.landtool.lanbase.common.shiro.ShiroRealm; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import javax.servlet.Filter; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * @author lanbase * @Description: TODO(Shiro配置) * @date 2017-6-23 15:07 */ @Configuration public class ShiroConfig { @Value("${sys.loginUrl}") private String loginUrl; @Autowired private SessionWatcher sessionWatcher; @Bean("sessionManager") public SessionManager sessionManager(){ DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setSessionValidationSchedulerEnabled(true); //sessionManager.setSessionIdUrlRewritingEnabled(false); sessionManager.setSessionIdCookieEnabled(true); //这里设置超时时间 todo sessionManager.setGlobalSessionTimeout(1000*60*30); List listeners=new ArrayList(); listeners.add(sessionWatcher); sessionManager.setSessionListeners(listeners); return sessionManager; } @Bean("securityManager") public SecurityManager securityManager(ShiroRealm shiroRealm, SessionManager sessionManager) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm); securityManager.setSessionManager(sessionManager); return securityManager; } @Bean("shiroFilter") public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); //过滤 /* Map filters = new HashMap<>(); filters.put("shiro", new ShiroAuthenticatingFilter()); shiroFilter.setFilters(filters);*/ Map filterMap = new LinkedHashMap<>(); //api filterMap.put("/api/**", "anon"); //swagger filterMap.put("/swagger-resources/**", "anon"); filterMap.put("/v2/**", "anon"); filterMap.put("/webjars/**", "anon"); //views filterMap.put("/admin/*", "anon"); // filterMap.put("/lanwebapp/*", "anon"); //login filterMap.put("/login", "anon"); filterMap.put("/logout", "anon"); // filterMap.put("/**/**list/**", "anon"); // filterMap.put("/**/**log/**", "anon"); filterMap.put("/captcha.jpg", "anon"); //static filterMap.put("/**/*.css", "anon"); filterMap.put("/**/*.js", "anon"); // filterMap.put("/**/*.html", "anon"); // filterMap.put("/**/*.html", "anon"); filterMap.put("/fonts/**", "anon"); filterMap.put("/image/**", "anon"); filterMap.put("/plugins/**", "anon"); filterMap.put("/favicon.ico", "anon"); //other filterMap.put("/**/druid/**", "anon"); filterMap.put("/uploadFile/**", "anon");//上传文件映射的地址 //shiro filterMap.put("/ws", "anon"); filterMap.put("/ws/**", "anon"); filterMap.put("/spcData/**", "anon"); //临时过滤 filterMap.put("/swagger**", "anon"); //临时过滤 // filterMap.put("/res/**", "anon"); // filterMap.put("/terra/**", "anon"); //临时过滤 // filterMap.put("/org/**", "anon"); //临时过滤 // filterMap.put("/lanwebapp/**", "anon"); //临时过滤 filterMap.put("/**", "authc"); //String url = "https://spinach.lt.com:9443/cas/login?service=http://127.0.0.1:8081/login"; String url = loginUrl; shiroFilter.setLoginUrl(url); // 登录成功后要跳转的链接 shiroFilter.setSuccessUrl("/index"); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; } @Bean("lifecycleBeanPostProcessor") public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); proxyCreator.setProxyTargetClass(true); return proxyCreator; } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(securityManager); return advisor; } }