前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringBoot
长期系列教程,从入门到进阶, 篇幅会较多~
适合人群
- 学完Java基础
- 想通过Java快速构建web应用程序
- 想学习或了解SpringBoot
- SpringBoot进阶学习
大佬可以绕过 ~
背景
如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot
基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件
的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获
~
情景回顾
上期带大家学习了Shiro
的基本使用,实现了用户认证功能,本期将带大家学习Shiro
中如何存储cookie
。同样的,我们集成到Springboot
中。
功能实现
上期我们遗留了一个小问题,就是用户打开浏览器登录后,再关闭,然后又跳回了登录页。那么如何去解决这个问题❓其实很简单,让我们的服务器记住它不就好了,想让它失效,就给一个过期时间
在ShiroConfig
类中添加如下方法:
/** * cookie * @return */ public SimpleCookie rememberMeCookie() { // 设置cookie名称 SimpleCookie cookie = new SimpleCookie("rememberMe"); // 过期时间,单位秒 cookie.setMaxAge(86400); return cookie; } /** * cookie管理对象 * @return */ public CookieRememberMeManager rememberMeManager() { CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCookie(rememberMeCookie()); // cookie加密的密钥 cookieRememberMeManager.setCipherKey(Base64.decode("uwandaljILlia458ad4")); return cookieRememberMeManager; } 复制代码
修改 securityManager()
方法
@Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm()); // 添加remberManager securityManager.setRememberMeManager(rememberMeManager()); return securityManager; } 复制代码
修改认证路径, user
指的是用户认证通过或者配置了Remember Me
记住用户登录状态后可访问
// filterChainDefinitionMap.put("/**", "authc"); filterChainDefinitionMap.put("/**", "user"); 复制代码
最后修改我们的控制器,在登录调用的时候传入是否记住:
@PostMapping("/login") @ResponseBody public String login(String username, String password) { //UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 获取Subject对象 UsernamePasswordToken token = new UsernamePasswordToken(username, password, true); Subject subject = SecurityUtils.getSubject(); try { // 执行登录 subject.login(token); return "ok"; } catch (UnknownAccountException e) { return e.getMessage(); } catch (IncorrectCredentialsException e) { return "IncorrectCredentialsException " + e.getMessage(); } catch (LockedAccountException e) { return "LockedAccountException " + e.getMessage(); } catch (AuthenticationException e) { return "认证失败!"; } } 复制代码
大家试着运行一下 ~
结束语
本期内容就到这里结束了,总结一下,本节主要讲了Shiro
如何记住用户登录状态以及相关实现,大家可以自己多试试
下期预告
下期给大家讲讲Shiro
中的权限认证,这块内容也是重点。下期见, 关注我,不迷路~ 加群一起交流