最终demo
到这节为止,我们已经实现了身份验证和权限验证。但是,如果我们登录之后多次访问http://localhost:8080/userInfo/userDel
的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些我们提供给shiro一次就够了。
下面,我们开始给shiro添加缓存支持:
1.添加依赖
org.apache.shiro
shiro-ehcache
1.2.2
org.springframework
spring-context-support
2.注入缓存
在com.example.demo.config.Shiro.ShiroConfiguration
中添加以下方法。
@Bean
public EhCacheManager ehCacheManager() {
System.out.println("ShiroConfiguration.getEhCacheManager()");
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");
return ehCacheManager;
}
将缓存对象注入到SecurityManager
中:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());
securityManager.setCacheManager(ehCacheManager()); //注入缓存对象。
return securityManager;
}
3.添加配置文件
在src/main/resouces/config中添加ehcache-shiro.xml配置文件:
启动项目,再多次访问http://localhost:8080/userInfo/userDel
,这时候只会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。
---------------------下面我们开始配置记住密码-----------
1.在com.example.demo.config.Shiro.ShiroConfiguration
中加入下面两个方法:
//cookie对象;
@Bean
public SimpleCookie rememberMeCookie() {
System.out.println("ShiroConfiguration.rememberMeCookie()");
//这个参数是cookie的名称,对应前端的checkbox的name = rememberMe
SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
//
simpleCookie.setMaxAge(259200);
return simpleCookie;
}
//cookie管理对象;
@Bean
public CookieRememberMeManager cookieRememberMeManager() {
System.out.println("ShiroConfiguration.rememberMeManager()");
CookieRememberMeManager manager = new CookieRememberMeManager();
manager.setCookie(rememberMeCookie());
return manager;
}
将rememberMeManager注入到SecurityManager中
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());
securityManager.setCacheManager(ehCacheManager());
securityManager.setRememberMeManager(cookieRememberMeManager()); //注入rememberMeManager;
return securityManager;
}
在ShiroFilterFactoryBean
中添加记住我过滤器user
,添加user
过滤器的资源在记住我或认证之后就可以直接访问了。
Map filterChainDefinitionMap = new LinkedHashMap<>();
...
filterChainDefinitionMap.put("/index", "user");
filterChainDefinitionMap.put("/", "user");
....
最后,在login.html页面添加记住我单选框
记住我
启动项目,正常登录后关闭浏览器,再打开浏览器输入http://localhost:8080/index
,这时候就可以直接访问index页面,不需要再登录了。
SpringBoot + Shiro (一)基础工程搭建
SpringBoot + Shiro (二)身份校验和角色设置
SpringBoot + Shiro (三)权限
SpringBoot + Shiro (四)缓存&记住密码
SpringBoot + Shiro (五)验证码
最后,感谢几位作者的文章解惑:
springboot整合shiro-登录认证和权限管理
Spring Boot Shiro权限管理【从零开始学Spring Boot】
Spring boot 中使用Shiro
最后打个小广告,闲着没事东拼西凑了个小程序(好多妹子奥),闲着无聊的小伙伴帮我扫扫凑凑人数哈: