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 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 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; } }