92 lines
3.3 KiB
Java
92 lines
3.3 KiB
Java
package com.common.base.shiro;
|
||
|
||
import com.common.base.shiro.service.SystemRealm;
|
||
import com.common.base.utils.SpringContextUtil;
|
||
import org.apache.shiro.mgt.SecurityManager;
|
||
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.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.ComponentScan;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.stereotype.Component;
|
||
|
||
import javax.annotation.PostConstruct;
|
||
import javax.annotation.Resource;
|
||
import javax.servlet.Filter;
|
||
import java.util.HashMap;
|
||
import java.util.LinkedHashMap;
|
||
import java.util.Map;
|
||
|
||
@Configuration
|
||
public class ShiroConfig {
|
||
|
||
@Autowired
|
||
SystemRealm systemRealm;
|
||
|
||
/**
|
||
* 不加这个注解不生效,具体不详
|
||
*/
|
||
@Bean
|
||
@ConditionalOnMissingBean
|
||
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
|
||
DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
|
||
defaultAAP.setProxyTargetClass(true);
|
||
return defaultAAP;
|
||
}
|
||
|
||
/**
|
||
* 将自己的验证方式加入容器
|
||
*/
|
||
@Bean
|
||
public CustomRealm myShiroRealm() {
|
||
return new CustomRealm();
|
||
}
|
||
|
||
/**
|
||
* 权限管理,配置主要是Realm的管理认证
|
||
*/
|
||
@Bean("securityManager")
|
||
public SecurityManager securityManager() {
|
||
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
||
securityManager.setRealm(myShiroRealm());
|
||
return securityManager;
|
||
}
|
||
|
||
|
||
/**
|
||
* Filter工厂,设置对应的过滤条件和跳转条件
|
||
*/
|
||
@Bean("shiroFilter")
|
||
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
|
||
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
||
shiroFilterFactoryBean.setSecurityManager(securityManager);
|
||
Map<String, Filter> filters = new HashMap<>();
|
||
filters.put("auth", new AuthFilter());
|
||
shiroFilterFactoryBean.setFilters(filters);
|
||
shiroFilterFactoryBean.setFilters(filters);
|
||
shiroFilterFactoryBean.setFilterChainDefinitionMap(systemRealm.setShiroUrl());
|
||
return shiroFilterFactoryBean;
|
||
}
|
||
|
||
/**
|
||
* 加入注解的使用,不加入这个注解不生效
|
||
*/
|
||
@Bean
|
||
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
|
||
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
|
||
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
|
||
return authorizationAttributeSourceAdvisor;
|
||
}
|
||
|
||
@Bean
|
||
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
|
||
return new LifecycleBeanPostProcessor();
|
||
}
|
||
}
|