| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * | 
|  * https://www.renren.io | 
|  * | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| package com.zt.core.config.shiro; | 
|   | 
| import com.zt.core.shiro.Oauth2Filter; | 
| import com.zt.core.shiro.Oauth2Realm; | 
| import org.apache.shiro.mgt.SecurityManager; | 
| 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.springframework.beans.factory.annotation.Value; | 
| import org.springframework.context.annotation.Bean; | 
| import org.springframework.context.annotation.Configuration; | 
|   | 
| import javax.servlet.Filter; | 
| import java.util.HashMap; | 
| import java.util.LinkedHashMap; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * Shiro的配置文件 | 
|  * | 
|  * @author Mark sunlightcs@gmail.com | 
|  */ | 
| @Configuration("shiroConfig") | 
| public class ShiroConfig { | 
|   | 
|     @Value("${data.sessionTimeout}") | 
|     private Long sessionTimeout; | 
|     @Bean | 
|     public DefaultWebSessionManager sessionManager(){ | 
|         DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); | 
|         sessionManager.setSessionValidationSchedulerEnabled(false); | 
|         sessionManager.setSessionIdUrlRewritingEnabled(false); | 
|         sessionManager.setGlobalSessionTimeout(sessionTimeout*60*1000); | 
|         return sessionManager; | 
|   | 
|     } | 
|   | 
|     @Bean("securityManager") | 
|     public SecurityManager securityManager(Oauth2Realm oAuth2Realm, SessionManager sessionManager) { | 
|         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); | 
|         securityManager.setRealm(oAuth2Realm); | 
|         securityManager.setSessionManager(sessionManager); | 
|         securityManager.setRememberMeManager(null); | 
|         return securityManager; | 
|     } | 
|   | 
|     @Bean("shiroFilter") | 
|     public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { | 
|         ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); | 
|         shiroFilter.setLoginUrl("/single"); | 
|         shiroFilter.setSecurityManager(securityManager); | 
|   | 
|         //oauth过滤 | 
|         Map<String, Filter> filters = new HashMap<>(); | 
|         filters.put("oauth2", new Oauth2Filter()); | 
|         shiroFilter.setFilters(filters); | 
|   | 
|         Map<String, String> filterMap = new LinkedHashMap<>(); | 
|         // 前端页面 | 
|         filterMap.put("/index.html", "anon"); | 
|         filterMap.put("/dist/**", "anon"); | 
|         filterMap.put("/element-theme/**", "anon"); | 
|         filterMap.put("/favicon.ico", "anon"); | 
|         filterMap.put("/public/**", "anon"); | 
|         // 接口文档 | 
|         filterMap.put("/swagger/**", "anon"); | 
|         filterMap.put("/v2/api-docs", "anon"); | 
|         filterMap.put("/doc.html", "anon"); | 
|         filterMap.put("/swagger-resources/**", "anon"); | 
|         // 工作流、表单 | 
|         filterMap.put("/activiti-explorer/**", "anon"); | 
|         filterMap.put("/form-generator/**", "anon"); | 
|         // websocket | 
|         filterMap.put("/websocket","anon"); | 
|         filterMap.put("/websocket/**","anon"); | 
|   | 
|         filterMap.put("/webjars/**", "anon"); | 
|         filterMap.put("/druid/**", "anon"); | 
|   | 
|         filterMap.put("/login", "anon"); | 
|         filterMap.put("/singlelogin", "anon"); | 
|         filterMap.put("/loginOut", "anon"); | 
|         filterMap.put("/logOut", "anon"); | 
|         filterMap.put("/system/user/getLoginUserOfToken","anon"); | 
|         filterMap.put("/system/user/verifyOFToken","anon"); | 
|   | 
|         filterMap.put("/sys/oss/content2","anon"); | 
|   | 
|         filterMap.put("/sys/dict/type/all", "anon"); | 
|         filterMap.put("/sys/keyword/replacement", "anon"); | 
|         filterMap.put("/sys/dict/type/getDictMap", "anon"); | 
|   | 
|         filterMap.put("/captcha", "anon"); | 
|         filterMap.put("/sys/config","anon"); | 
|         filterMap.put("/sys/oss/content","anon"); | 
|   | 
|         filterMap.put("/sys/dept/treeRegister","anon"); | 
|         filterMap.put("/sys/post/list","anon"); | 
|         filterMap.put("/sys/job/tree","anon"); | 
|         filterMap.put("/sys/userReg/**","anon"); | 
|         filterMap.put("/sys/userChangePassword", "anon"); | 
|         filterMap.put("/sys/userRegister", "anon"); | 
|         filterMap.put("/ztProduct/getShipList", "anon"); | 
|   | 
|         filterMap.put("/sysPictureBase/getSvgImage","anon"); | 
|   | 
|         filterMap.put("/product/getShipList","anon"); | 
|         filterMap.put("/teamGroup/class/tree","anon"); | 
|         filterMap.put("/taskReliability/SimulatAssess/calculate","anon"); | 
|   | 
|   | 
|   | 
|         filterMap.put("/**", "oauth2"); | 
|         shiroFilter.setFilterChainDefinitionMap(filterMap); | 
|   | 
|         return shiroFilter; | 
|     } | 
|   | 
|     @Bean("lifecycleBeanPostProcessor") | 
|     public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { | 
|         return new LifecycleBeanPostProcessor(); | 
|     } | 
|   | 
|     @Bean("authorizationAttributeSourceAdvisor") | 
|     public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { | 
|         AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); | 
|         advisor.setSecurityManager(securityManager); | 
|         return advisor; | 
|     } | 
| } |