package com.jingyi.iotserver.common.configuration; import com.jingyi.iotserver.firestationport.shiro.ClientUserNameShiroRealm; import org.apache.shiro.cache.ehcache.EhCacheManager; 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.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.web.filter.DelegatingFilterProxy; import java.util.LinkedHashMap; import java.util.Map; //@Configuration public class ShiroConfig { @Bean public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){ return new LifecycleBeanPostProcessor(); } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(){ AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(defaultWebSecurityManager()); return authorizationAttributeSourceAdvisor; } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){ DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); return defaultAdvisorAutoProxyCreator; } @Bean public EhCacheManager ehCacheManager(){ EhCacheManager ehCacheManager = new EhCacheManager(); ehCacheManager.setCacheManagerConfigFile("classpath:config/ehcache.xml"); return ehCacheManager; } @Bean public ClientUserNameShiroRealm customUserNameShiroRealm(){ ClientUserNameShiroRealm customUserNameShiroRealm = new ClientUserNameShiroRealm(); customUserNameShiroRealm.setCacheManager(ehCacheManager()); return customUserNameShiroRealm; } @Bean public DefaultWebSecurityManager defaultWebSecurityManager(){ DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setCacheManager(ehCacheManager()); defaultWebSecurityManager.setRealm(customUserNameShiroRealm()); // defaultWebSecurityManager.setAuthenticator(modularRealmAuthenticator()); // defaultWebSecurityManager.setAuthorizer(modularRealmAuthorizer()); return defaultWebSecurityManager; } @Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager()); shiroFilterFactoryBean.setLoginUrl("/firectrl/client/user/login"); shiroFilterFactoryBean.setSuccessUrl("/admin/index"); shiroFilterFactoryBean.setUnauthorizedUrl("/401"); Map filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/firectrl/client/user/login","anon"); // filterChainDefinitionMap.put("/firectrl/client/getstationcount","anon"); filterChainDefinitionMap.put("/logout","logout"); filterChainDefinitionMap.put("/firectrl/client/*","authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } @Bean public FilterRegistrationBean filterRegistrationBean(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new DelegatingFilterProxy("shiroFilter")); filterRegistrationBean.addInitParameter("targetFilterLifecycle","true"); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } }