SpringBoot集成Shiro使用
在SpringBoot中集成Shiro
-
相关依赖:
org.apache.shiro
shiro-spring-boot-starter
1.8.0
org.apache.shiro
shiro-cache
1.8.0
com.github.theborakompanioni
thymeleaf-extras-shiro
2.0.0
-
shiro配置代码
@Configuration
public class ShiroConfig {
/**
* shiro拦截器
*
* @param securityManager
* @return
*/
@Bean("shiroFilterFactoryBean")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 给 filter 设置 安全管理器
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 设置拦截路径
HashMap<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/admin/login/captcha", "anon");//anon:标识此请求为公共资源,所有人可以访问
filterMap.put("/admin/login/check", "anon");//anon:标识此请求为公共资源,所有人可以访问
filterMap.put("/admin/login/index.html", "anon");//anon:标识此请求为公共资源,所有人可以访问
filterMap.put("/admin/**", "authc");//authc:标识请求此资源需要认证和授权
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
// 设置拦截跳转至验证的路径
shiroFilterFactoryBean.setLoginUrl("/admin/login/index.html");
return shiroFilterFactoryBean;
}
@Bean("defaultWebSecurityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm, DefaultWebSessionManager defaultWebSessionManager) {
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
defaultWebSecurityManager.setSessionManager(defaultWebSessionManager);
defaultWebSecurityManager.setRealm(realm);
return defaultWebSecurityManager;
}
@Bean("defaultWebSessionManager")
public DefaultWebSessionManager defaultSessionManager() {
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
// 设置session过期时间3600s
Long timeout = 60L * 1000 * 60;//毫秒级别
defaultWebSessionManager.setGlobalSessionTimeout(timeout);
//解决登录时地址栏出现toLogin;jsessionid 问题
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
return defaultWebSessionManager;
}
/**
* 设置凭证匹配器为hash
*
* @return
*/
@Bean
public Realm getRealm() {
UserRealm userRealm = new UserRealm();
HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
//设置密码为MD5加密
hashedCredentialsMatcher.setHashAlgorithmName("md5");
//散列次数为1024次
hashedCredentialsMatcher.setHashIterations(1024);
//设置凭证匹配器为hashedCredentialsMatcher
userRealm.setCredentialsMatcher(hashedCredentialsMatcher);
//开启缓存管理,不用每次查询数据库
userRealm.setCacheManager(new MemoryConstrainedCacheManager());
//开启全局缓存
userRealm.setCachingEnabled(true);
//开启认证缓存
userRealm.setAuthenticationCachingEnabled(true);
//开启授权缓存
userRealm.setAuthenticationCachingEnabled(true);
return userRealm;
}
/**
* 启用shiro方言,可以在页面上使用shiro的标签
*
* @return
*/
@Bean
public ShiroDialect shiroDialect() {
return new ShiroDialect();
}
/**
* 启用shiro注解 加入注解的使用,不加入这个注解不生效
*/
@Bean
public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(
org.apache.shiro.mgt.SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(securityManager);
return advisor;
}
}
- 自定义Realm代码

浙公网安备 33010602011771号