安全管理器設置
/**
* shiro 安全管理器設置
* @return SecurityManager
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
List<Realm> realms = new ArrayList<>( );
realms.add( wxRealm() );
realms.add( userRealm() );
//設置securityManager 的 realm組.
securityManager.setRealms( realms );
//設置session管理器
securityManager.setSessionManager(sessionManager());
//自定義的模塊化領域認證(cs)
ModularRealmAuthenticator authenticator = new WxModularRealmAuthenticator();
/*
* 設置 authenticator中的 realm 組
* 注意,這的設置 realm 和前面 securityManager 設置realm沒有關係
* 兩邊都須要進行設置,這邊的用於登陸的校驗, securityManager 中的暫時不肯定
*/
authenticator.setRealms( realms );
securityManager.setAuthenticator( authenticator );
return securityManager;
session管理器
/**
* shiro session管理器
* 自定義了獲取session的方式
*/
@Bean
public DefaultWebSessionManager sessionManager() {
//使用自定義的session管理器
DefaultWebSessionManager sessionManager = new WxSessionManager();
sessionManager.setGlobalSessionTimeout(tomcatTimeout * 1000);
sessionManager.setSessionDAO(sessionDAO());
Collection<SessionListener> listeners = new ArrayList<SessionListener>();
listeners.add(new BDSessionListener());
sessionManager.setSessionListeners(listeners);
return sessionManager;
}
shiro攔截器
/**
* shiro攔截器, 設置攔截規則
* @param securityManager 安全管理器
* @return shiroFilterFactoryBean
*/
@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/home/**", "anon");
filterChainDefinitionMap.put("/login","anon");
filterChainDefinitionMap.put("/wxLogin","anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/docs/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/upload/**", "anon");
filterChainDefinitionMap.put("/files/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/blog", "anon");
filterChainDefinitionMap.put("/blog/open/**", "anon");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
開啓shiro aop註解支持
/**
* 開啓shiro aop註解支持。
* 進行註解權限校驗時須要使用代理方式;
* 因此須要開啓代碼支持;
*
* @param securityManager shiro 安全管理器
* @return AuthorizationAttributeSourceAdvisor
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}