90 lines
4.0 KiB
Java
90 lines
4.0 KiB
Java
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<String,String> 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;
|
|
}
|
|
}
|