package com.doumee.config.shiroMemory; 
 | 
  
 | 
import org.apache.coyote.http11.AbstractHttp11Protocol; 
 | 
import org.apache.shiro.mgt.SecurityManager; 
 | 
import org.apache.shiro.session.mgt.SessionManager; 
 | 
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; 
 | 
import org.apache.shiro.spring.web.ShiroFilterFactoryBean; 
 | 
import org.apache.shiro.web.mgt.DefaultWebSecurityManager; 
 | 
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.beans.factory.annotation.Value; 
 | 
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; 
 | 
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; 
 | 
import org.springframework.boot.web.servlet.server.ServletWebServerFactory; 
 | 
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 Eva.Caesar Liu 
 | 
 * @date 2023/02/14 11:14 
 | 
 */ 
 | 
//@Configuration 
 | 
public class ShiroConfig { 
 | 
  
 | 
    @Value("${cache.session.expire}") 
 | 
    private int sessionExpireTime; 
 | 
  
 | 
    @Autowired 
 | 
    private ShiroCredentialsMatcher shiroCredentialsMatcher; 
 | 
  
 | 
    @Autowired 
 | 
    private ShiroSessionDAO shiroSessionDAO; 
 | 
  
 | 
    @Autowired 
 | 
    private ShiroCacheManager shiroCacheManager; 
 | 
  
 | 
    @Autowired 
 | 
    private ShiroRealm shiroRealm; 
 | 
  
 | 
    @Bean 
 | 
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { 
 | 
        DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); 
 | 
        autoProxyCreator.setProxyTargetClass(true); 
 | 
        return autoProxyCreator; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public SessionManager sessionManager() { 
 | 
        ShiroSessionManager sessionManager = new ShiroSessionManager(); 
 | 
        sessionManager.setSessionDAO(shiroSessionDAO); 
 | 
        return sessionManager; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public SecurityManager securityManager() { 
 | 
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); 
 | 
        securityManager.setRealm(shiroRealm); 
 | 
        securityManager.setSessionManager(this.sessionManager()); 
 | 
        securityManager.setCacheManager(shiroCacheManager); 
 | 
        return securityManager; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { 
 | 
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); 
 | 
        shiroFilterFactoryBean.setSecurityManager(securityManager); 
 | 
        Map<String, String> map = new LinkedHashMap<>(); 
 | 
        // 路径拦截配置 
 | 
        map.put("/system/dictData/companyUserRules","anon"); 
 | 
        map.put("/system/login", "anon"); 
 | 
        map.put("/system/logout", "anon"); 
 | 
        map.put("/common/captcha", "anon"); 
 | 
        map.put("/business/areas/*", "anon"); 
 | 
        map.put("/business/company/register", "anon"); 
 | 
        map.put("/business/labels/page","anon"); 
 | 
        map.put("/public/uploadPicture","anon"); 
 | 
        map.put("/public/uploadLocal","anon"); 
 | 
        map.put("/business/*/list","anon"); 
 | 
        map.put("/business/goods/goodsPage","anon"); 
 | 
        map.put("/business/goods/h5Image","anon"); 
 | 
        map.put("/business/goods/export","anon"); 
 | 
        map.put("/business/goods/listForH5","anon"); 
 | 
  
 | 
  
 | 
        // - 放行swagger 
 | 
        map.put("/doc.html", "anon"); 
 | 
        map.put("/webjars/**", "anon"); 
 | 
        map.put("/swagger-resources/**", "anon"); 
 | 
        map.put("/v2/api-docs/**", "anon"); 
 | 
  
 | 
        // - 其他接口统一拦截 
 | 
        map.put("/**", "authc"); 
 | 
        shiroFilterFactoryBean.setFilterChainDefinitionMap(map); 
 | 
        // 添加认证过滤器 
 | 
        Map<String, Filter> filters = new LinkedHashMap<>(); 
 | 
        filters.put("authc", new ShiroAuthFilter()); 
 | 
        shiroFilterFactoryBean.setFilters(filters); 
 | 
        return shiroFilterFactoryBean; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { 
 | 
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); 
 | 
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); 
 | 
        return authorizationAttributeSourceAdvisor; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public ShiroSessionDAO getShiroSessionDAO () { 
 | 
        shiroSessionDAO.setExpireTime(sessionExpireTime); 
 | 
        return shiroSessionDAO; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public ShiroRealm getShiroRealm () { 
 | 
        shiroRealm.setCredentialsMatcher(shiroCredentialsMatcher); 
 | 
        return shiroRealm; 
 | 
    } 
 | 
  
 | 
    private int maxUploadSizeInMb = 10 * 1024 * 1024; // 10 MB 
 | 
  
 | 
    @Bean 
 | 
    public TomcatServletWebServerFactory tomcatEmbedded() { 
 | 
  
 | 
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); 
 | 
        tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> { 
 | 
            // connector other settings... 
 | 
            // configure maxSwallowSize 
 | 
            if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) { 
 | 
                // -1 means unlimited, accept bytes 
 | 
                ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1); 
 | 
            } 
 | 
        }); 
 | 
        return tomcat; 
 | 
    } 
 | 
} 
 |