自己如何建设微信网站,wordpress主题 标签,安微省城城乡建设厅网站,wordpress获取热门文章一般来讲#xff0c;记住密码的基本处理#xff0c;就是把用户的一些基本信息(密码)存入浏览器的Cookie#xff0c;下次登录的时候优先验证Cookie#xff0c;后端做处理#xff1b;以此来实现记住密码的功能#xff01;使用shiro自带的RememberMe功能#xff0c;使用起来…一般来讲记住密码的基本处理就是把用户的一些基本信息(密码)存入浏览器的Cookie下次登录的时候优先验证Cookie后端做处理以此来实现记住密码的功能使用shiro自带的RememberMe功能使用起来比较简单只需简单的配置。
需注意一点的是网站如果对安全性要求比较高的一般都不建议有记住密码的功能 因为Cookie是保存在本机电脑浏览器里不排除其他用户能使用此电脑拷走Cookie导入其他电脑继续使用您的账号登录 shiro实现了身份验证和权限验证。但是如果我们登录之后多次访问http://localhost:8080/userInfo/userDel的话会发现权限验证会每次都执行一次。这是有问题的因为像用户的权限这些我们提供给shiro一次就够了。
下面我们开始给shiro添加缓存支持
1.添加依赖 !-- shiro ehcache --dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-ehcache/artifactIdversion1.2.2/version/dependency!--包含支持UI模版VelocityFreeMarkerJasperReports邮件服务脚本服务(JRuby)缓存CacheEHCache任务计划Schedulinguartz。--dependencygroupIdorg.springframework/groupIdartifactIdspring-context-support/artifactId/dependency2.注入缓存
在com.example.demo.config.Shiro.ShiroConfiguration中添加以下方法。 Beanpublic EhCacheManager ehCacheManager() {System.out.println(ShiroConfiguration.getEhCacheManager());EhCacheManager ehCacheManager new EhCacheManager();ehCacheManager.setCacheManagerConfigFile(classpath:config/ehcache-shiro.xml);return ehCacheManager;}将缓存对象注入到SecurityManager中 Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setCacheManager(ehCacheManager()); //注入缓存对象。return securityManager;}3.添加配置文件
在src/main/resouces/config中添加ehcache-shiro.xml配置文件
?xml version1.0 encodingUTF-8?
ehcache nameesdiskStore pathjava.io.tmpdir/!--name:缓存名称。maxElementsInMemory:缓存最大数目maxElementsOnDisk硬盘最大缓存个数。eternal:对象是否永久有效一但设置了timeout将不起作用。overflowToDisk:是否保存到磁盘当系统当机时timeToIdleSeconds:设置对象在失效前的允许闲置时间单位秒。仅当eternalfalse对象不是永久有效时使用可选属性默认值是0也就是可闲置时间无穷大。timeToLiveSeconds:设置对象在失效前允许存活时间单位秒。最大时间介于创建时间和失效时间之间。仅当eternalfalse对象不是永久有效时使用默认是0.也就是对象存活时间无穷大。diskPersistent是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.diskSpoolBufferSizeMB这个参数设置DiskStore磁盘缓存的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。diskExpiryThreadIntervalSeconds磁盘失效线程运行时间间隔默认是120秒。memoryStoreEvictionPolicy当达到maxElementsInMemory限制时Ehcache将会根据指定的策略去清理内存。默认策略是LRU最近最少使用。你可以设置为FIFO先进先出或是LFU较少使用。clearOnFlush内存数量最大时是否清除。memoryStoreEvictionPolicy:Ehcache的三种清空策略;FIFOfirst in first out这个是大家最熟的先进先出。LFU Less Frequently Used就是上面例子中使用的策略直白一点就是讲一直以来最少被使用的。如上面所讲缓存的元素有一个hit属性hit值最小的将会被清出缓存。LRULeast Recently Used最近最少使用的缓存的元素有一个时间戳当缓存容量满了而又需要腾出地方来缓存新的元素的时候那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。--defaultCachemaxElementsInMemory10000eternalfalsetimeToIdleSeconds120timeToLiveSeconds120overflowToDiskfalsediskPersistentfalsediskExpiryThreadIntervalSeconds120/!-- 登录记录缓存锁定10分钟 --cache namepasswordRetryCachemaxEntriesLocalHeap2000eternalfalsetimeToIdleSeconds3600timeToLiveSeconds0overflowToDiskfalsestatisticstrue/cache/ehcache启动项目再多次访问http://localhost:8080/userInfo/userDel这时候只会在后台打印一次配置权限的信息了说明shiro缓存起了作用。
---------------------下面我们开始配置记住密码-----------
1.在com.example.demo.config.Shiro.ShiroConfiguration中加入下面两个方法 //cookie对象;Beanpublic SimpleCookie rememberMeCookie() {System.out.println(ShiroConfiguration.rememberMeCookie());//这个参数是cookie的名称对应前端的checkbox的name rememberMeSimpleCookie simpleCookie new SimpleCookie(rememberMe);//!-- 记住我cookie生效时间30天 ,单位秒;--simpleCookie.setMaxAge(259200);return simpleCookie;}//cookie管理对象;Beanpublic CookieRememberMeManager cookieRememberMeManager() {System.out.println(ShiroConfiguration.rememberMeManager());CookieRememberMeManager manager new CookieRememberMeManager();manager.setCookie(rememberMeCookie());return manager;}将rememberMeManager注入到SecurityManager中
Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setCacheManager(ehCacheManager());securityManager.setRememberMeManager(cookieRememberMeManager()); //注入rememberMeManager;return securityManager;}在ShiroFilterFactoryBean中添加记住我过滤器user添加user过滤器的资源在记住我或认证之后就可以直接访问了。
MapString, String filterChainDefinitionMap new LinkedHashMap();
...filterChainDefinitionMap.put(/index, user);filterChainDefinitionMap.put(/, user);
....最后在login.html页面添加记住我单选框
Pinput typecheckbox namerememberMe /记住我/P启动项目正常登录后关闭浏览器再打开浏览器输入http://localhost:8080/index这时候就可以直接访问index页面不需要再登录了。