通用框架平台,每个分支对应子通用框架平台,禁止Merge不同分支!! 分支版本区别见项目内readme.md
whycxzp
2024-01-10 9a2b1251fc48874b76d3b02dbfc306698325dfeb
src/main/java/com/whyc/config/ShiroConfig.java
@@ -1,43 +1,105 @@
package com.whyc.config;
import com.whyc.filter.KickedOutFilter;
import com.whyc.filter.RolesOrAuthorizationFilter;
import com.whyc.properties.PropertiesUtil;
import com.whyc.properties.RedisProperties;
import com.whyc.realm.CustomRealm;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.session.mgt.eis.SessionDAO;
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.filter.authz.RolesAuthorizationFilter;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
 * 暂时提供权限管理,会话管理后续更新 TODO
 * 暂时提供权限管理,会话管理后续更新
 */
@Configuration
//@Log4j2
@Slf4j
@EnableConfigurationProperties({RedisProperties.class})
public class ShiroConfig {
    @Autowired
    CustomRealm customRealm;
    @Autowired
    RedisProperties redisProperties;
    /*================Session采用Redis分布式Session===================*/
    /**
     * Redisson客户端,初始化
     *//*
    @Bean(name = "redissonClient4Shiro")
    public RedissonClient redissonClient(){
        log.info("======初始化redissonClient4Shiro======");
        String[] nodeList = shiroRedisProperties.getNodes().split(",");
        Config config = new Config();
        if(nodeList.length==1){
            config.useSingleServer().setAddress(nodeList[0])
                .setConnectTimeout(shiroRedisProperties.getConnectTimeout())
                .setConnectionPoolSize(shiroRedisProperties.getConnectPoolSize())
                .setConnectionMinimumIdleSize(shiroRedisProperties.getConnectMinIdleSize())
                .setTimeout(shiroRedisProperties.getTimeout());
        }else{
            config.useClusterServers().addNodeAddress(nodeList)
                .setConnectTimeout(shiroRedisProperties.getConnectTimeout())
                .setMasterConnectionPoolSize(shiroRedisProperties.getConnectPoolSize())
                .setMasterConnectionMinimumIdleSize(shiroRedisProperties.getConnectMinIdleSize())
                .setTimeout(shiroRedisProperties.getTimeout());
        }
        RedissonClient redissonClient = Redisson.create(config);
        return redissonClient;
    }*/
    /**
     * 初始化RedisSessionDao
     */
    @Bean("redisSessionDao")
    @DependsOn("redisClient")
    public SessionDAO redisSessionDao(){
        RedisSessionDao redisSessionDao = new RedisSessionDao(redisProperties.getGlobalSessionTimeout());
        return redisSessionDao;
    }
    /**Session管理器*/
    @Bean("sessionManager")
    @DependsOn("redisSessionDao")
    public DefaultWebSessionManager shiroSessionManager(){
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        //设置Session参数
        sessionManager.setSessionDAO(redisSessionDao());
        sessionManager.setSessionValidationSchedulerEnabled(false);
        sessionManager.setSessionIdCookieEnabled(true);
        sessionManager.setSessionIdUrlRewritingEnabled(false);
        SimpleCookie simpleCookie = new SimpleCookie("CT");
        sessionManager.setSessionIdCookie(simpleCookie);
        sessionManager.setGlobalSessionTimeout(redisProperties.getGlobalSessionTimeout());
        return sessionManager;
    }
    /*====================权限管理=======================*/
    /**权限管理器*/
    @Bean(name = "securityManager")
    @DependsOn("sessionManager")
    public DefaultWebSecurityManager defaultWebSecurityManager(){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(customRealm);
        securityManager.setSessionManager(shiroSessionManager());
        return securityManager;
    }
@@ -79,23 +141,15 @@
        return map;
    }
    /**自定义过滤器*/
    private Map<String, Filter> filters(){
        HashMap<String, Filter> map = new HashMap<>();
        map.put("rolesOr",new RolesOrAuthorizationFilter());
        return map;
    }
    /**过滤器*/
//    @Bean("shiroFilter")
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(){
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        //注入新定义的过滤器
        shiroFilter.setFilters(filters());
        //shiroFilter
        shiroFilter.setSecurityManager(defaultWebSecurityManager());
        shiroFilter.setFilterChainDefinitionMap(filterChainDefinition());
        shiroFilter.setLoginUrl("/login.html");
        shiroFilter.setLoginUrl("/index.html");
        //shiroFilter.setLoginUrl("/index.html#login");
        shiroFilter.setUnauthorizedUrl("/login/unauthorized");
        return shiroFilter;