首页>代码>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;
	}
}


















最近下载更多
sunlzh888888  LV29 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日
go_away15  LV7 2021年9月26日
最近浏览更多
bluerstar  LV1 10月23日
sunlzh888888  LV29 9月20日
TY0165  LV20 6月23日
llllllK  LV5 5月13日
1941549176  LV4 4月29日
13521878735  LV3 3月27日
做自己的太阳  LV11 2月1日
xuweiwowzy  LV5 1月14日
WBelong  LV8 2023年12月27日
black8angel  LV4 2023年12月22日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友