百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

SpringBoot进阶之整合Shiro鉴权框架(三)

wxin55 2024-11-01 14:30 8 浏览 0 评论

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

相关推荐

Java中List 和 Map、Set 的区别(list和set和map)

hello,大家好,我是霖仔java集合的大家了解,我再给大家说一下他们的区别,希望能够帮助到大家结构特点:List和Set是存储单列数据的集合,Map是存储键和值这样的双列数据的集合;Lis...

Java 集合框架全面解析:选对数据结构,提升开发效率

上一章我们详细介绍了各种常用的数据结构情况(参考:数据结构复杂度全览:如何选择最优结构?),本文结合关键数据结构,从列表(List)、队列(Queue)、集合(Set)、映射(Map)四个维度,深入解...

LinkedList竟然比ArrayList慢了1000多倍?(动图+性能评测)

数组和链表是程序中常用的两种数据结构,也是面试中常考的面试题之一。然而对于很多人来说,只是模糊的记得二者的区别,可能还记得不一定对,并且每次到了面试的时候,都得把这些的概念拿出来背一遍才行,未免有些麻...

LinkedList 底层源码深度解析(linkedlist底层数据结构)

目录1.引言2.LinkedList概述2.1类继承体系图2.2各个接口作用3.与ArrayList的对比4.底层数据结构5.核心方法源码解析5.1add()方法5.2a...

List的用法和实例详解——Java进阶知识讲义系列(四)

序欢迎来到全网最完整的Java进阶知识系列教程!!!每天定时更新!!!本期是Java进阶知识系列的第四讲,将分享Java常用的数据容器——集合类。集合类也分很多类型,比如:List、Set、Map、Q...

Rust高效集合操作(rust基本操作)

集合的分类Rust的集合类型主要分布在标准库的std::collections模块中,同时也包括语言内置的数组和字符串类型序列容器序列容器维护元素的顺序,适合需要按索引访问或顺序遍历的场景向量(...

Java八股文:核心知识点梳理(java八股文是啥)

一、Java基础1.Java基本数据类型8种基本类型:整型:byte(1),short(2),int(4),long(8)浮点型:float(4),double(8)字符型:char(2)布...

面试题:ArrayList和LinkedList有什么区别?

面试题

为什么我不推荐研发人员使用 LinkedList?

在Java集合框架中,LinkedList作为List的实现之一,经常被认为是ArrayList的替代方案。然而,在大多数实际场景下,我们并不推荐使用LinkedList,原因主要集中...

ArrayList 、 LinkedList、Vector的区别

ArrayList、LinkedList、Vector的区别如下:ArrayListLinkedListVector结构动态数组双向链表动态数组是否线程安全否否是效率遍历查找快,插入删除慢插入删除...

(2020 )Java最新面试笔试题答案解析(一)

Java中的集中基本数据类型是什么?各占用多少字节?【数值型】—(整数类型)byte(1字节)short(2字节)int(4字节)long(8字节)拓展:Java中的数据类型除了上面的基本...

超简单五步实现Linux虚拟机CentOS 7系统Root密码忘记重置

环境:CentOS7.5重置root密码:1.CentOS7虚拟机开机,将鼠标光标移动至虚拟机内。2.在虚拟机中使用键盘上↑和↓键将选择行设置为第一行(背景高亮即为选中),按下键盘上的e,进...

吊轨门和推拉门哪个好?北京今朝区别介绍看完不入坑

厨房到底使用什么门好?相信这是大多数业主都比较抓狂的事情,其实在装修中材料的选择最终还是要依据空间而定,那么吊轨门和推拉门哪个好呢?下面就跟随北京装修网一起来看看吧!吊轨门与推拉门介绍吊轨门吊轨门的特...

〖省钱宝典〗不花冤枉钱,少走弯路!居家中推拉门如何设计?

想要空间最大程度的显大?想要充足的光线?又想拥有合理的区域划分?那么推拉门是你绝对不能错过的好选择。推拉门的设计轻盈简洁,绝对是室内每个空间的福音。它不仅可以最大化地节省空间,方便了居室的功能划分和利...

吊趟门与推拉门有什么区别?(吊趟门贵还是推拉门贵)

吊趟门与推拉门的区别很多人在购买的时候并不清楚,有些客人甚至根本分不清吊趟门和推拉门,今天小编就给大家讲讲吊趟门与推拉门的相关内容,看看吊趟门与推拉门的区别有哪些?1、推拉门采用以门扇下滑轮为主支撑点...

取消回复欢迎 发表评论: