/** 
 | 
 * 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("/product/getShipList","anon"); 
 | 
        filterMap.put("/teamGroup/class/tree","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; 
 | 
    } 
 | 
} 
 |