首页>代码>spring boot+Mybatis+shiro+bootstrap实现网站后台权限管理系统>/AuthorityManagement/src/main/java/com/cy/pj/common/config/SpringShiroConfig.java
package com.cy.pj.common.config;

import java.util.LinkedHashMap;

import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.cache.MemoryConstrainedCacheManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
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.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Configuration 注解描述的类为一个配置对象,此对象也会交给spring管理
 *
 */
@Configuration
public class SpringShiroConfig {
	
	/**
	 * 配置SecurityManager对象(shiro核心安全管理器对象)
	 * 
	 * @return
	 */
	@Bean
	public SecurityManager securityManager(Realm realm, CacheManager cacheManager, CookieRememberMeManager rememberManager) {
		DefaultWebSecurityManager sManager = new DefaultWebSecurityManager();
		sManager.setRealm(realm);
		sManager.setCacheManager(cacheManager);
		sManager.setRememberMeManager(rememberManager);
		return sManager;
	}

	
	
	//=========== 认证配置 ===============
	/**
	 * 配置ShiroFilterFactoryBean对象, 通过此对象创建过滤器工厂,并指定过滤规则
	 * 
	 * @param securityManager
	 * @return
	 */
	@Bean
	public ShiroFilterFactoryBean shiroFilterFactory(SecurityManager securityManager) {
		ShiroFilterFactoryBean sfBean = new ShiroFilterFactoryBean();
		sfBean.setSecurityManager(securityManager);

		sfBean.setLoginUrl("/doLoginUI");

		// 定义map指定请求过滤规则(哪些资源允许匿名访问,哪些必须认证访问)
		LinkedHashMap<String, String> map = new LinkedHashMap<>();
		// 静态资源允许匿名访问:"anon"
		map.put("/bower_components/**", "anon");
		map.put("/build/**", "anon");
		map.put("/dist/**", "anon");
		map.put("/plugins/**", "anon");
		map.put("/user/doLogin", "anon");
		map.put("/doLogout", "logout");
		// 除了匿名访问的资源,其它都要认证("authc")后访问
//		map.put("/**","authc");
		map.put("/**","user");// 记住我时将authc改为user
		sfBean.setFilterChainDefinitionMap(map);
		return sfBean;
	}

	
	//=========== 授权配置 ===============
	/**
	 * 配置bean对象的生命周期管理。
	 * spring框架管理此对象时,会基于此对象管理shiro框架中相关api对象的生命周期
	 * 
	 * @return
	 */
	@Bean
	public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
		return new LifecycleBeanPostProcessor();
	}

	/**
	 * 配置advisor对象,shiro框架底层会通过此对象的matchs方法返回值决定是否创建代理对象,进行权限控制。
	 * 
	 * @param securityManager
	 * @return
	 */
	@Bean
	public AuthorizationAttributeSourceAdvisor newAuthorizationAttributeSourceAdvisor(
			@Autowired SecurityManager securityManager) {
		AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
		advisor.setSecurityManager(securityManager);
		return advisor;
	}
	
	
	//=========== 缓存配置 ===============
	/**
	 * 配置缓存Bean对象
	 * @return
	 */
	@Bean
	public CacheManager shiroCacheManager(){
		 return new MemoryConstrainedCacheManager();
	}
	
	
	
	//=========== 会话配置 ===============
	/**
	 * 记住我
	 * @return
	 */
	@Bean
	public CookieRememberMeManager rememberMeManager() {
		CookieRememberMeManager cManager=
				new CookieRememberMeManager();
		SimpleCookie cookie=new SimpleCookie("rememberMe");
		cookie.setMaxAge(10*60);
		cManager.setCookie(cookie);
		return cManager;
	}
}


















最近下载更多
zhaoming200677  LV13 4月15日
sunlzh888888  LV29 2024年9月20日
shuangfu  LV25 2023年10月19日
tyyeng  LV18 2023年8月1日
zdh3907  LV15 2022年11月10日
wuying8208  LV15 2022年10月31日
刘亦菲9527  LV15 2022年8月2日
哆啦A梦伴我同行  LV10 2021年12月1日
xukimi1983  LV2 2021年11月15日
尹恒yingying  LV18 2021年10月13日
最近浏览更多
Solowen 4月16日
暂无贡献等级
zhaoming200677  LV13 4月15日
ma406805131  LV19 2024年12月20日
zruth30  LV1 2024年12月8日
bluerstar  LV1 2024年10月23日
sunlzh888888  LV29 2024年9月20日
TY0165  LV20 2024年6月23日
llllllK  LV5 2024年5月13日
1941549176  LV4 2024年4月29日
13521878735  LV3 2024年3月27日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友