| 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("/system/loginH5", "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; | 
|     } | 
| } |