SpringBoot进阶之整合Shiro鉴权框架(三)
前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫。目前正在出一个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中的权限认证,这块内容也是重点。下期见, 关注我,不迷路~ 加群一起交流
往期内容
- 我的博客(阅读体验较佳)
- Springboot入门
- Springboot基础(一)
- Springboot基础(二)
- Springboot基础(三)
- Springboot基础(四)
- Springboot基础(五)
- SpringBoot进阶之缓存中间件Redis
- SpringBoot进阶之MyBatis分页插件
- SpringBoot进阶之跨域问题处理(CORS)
- SpringBoot进阶之日志集成
- SpringBoot进阶之请求拦截
- SpringBoot进阶之事务管理及并发问题
- SpringBoot进阶之整合Shiro鉴权框架(一)
- SpringBoot进阶之整合Shiro鉴权框架(二)
项目源码(持续更新 欢迎star??)
- springboot-all
- 地址: https://github.com/qiuChengleiy/springboot-all.git
本文暂时没有评论,来添加一个吧(●'◡'●)