Shiro 登录、退出、校验是否登录涉及到的Session和Cookie

前提

我们的使用的是DefaultWebSessionManager而不是ServletContainerSessionManager。这就意味着前者的session为Shiro的,后者的session为Tomcat的。

登录

  DefaultWebSessionManager调用start()方法(在AbstractNativeSessionManager中)创建Session(SimpleSession),创建过程中会将Session放到介质(Redis)中,再调用onStart()方法将sessionId放入到浏览器的Cookie中。

  我们已经拿到Session(SimpleSession)了可以将用户相关信息放到其中:session.setAttribute("userName", userName);,这个过程是放到了SimpleSession的一个Map属性中,同时更新介质中的SimpleSession。

退出

  DefaultWebSessionManager调用stop(SessionKey key)方法(在AbstractNativeSessionManager中),SimpleSession设置停止时间戳,再调用onStop()方法设置最后访问时间戳并更新介质中的session,清除浏览器中关于session的Cookie。

校验是否登录

  我们可以通过Session是否存在并且session中的用户信息是否存在来判断或者是Cookie是否存在或者是Subject.isAuthenticated()是否为false,有其一不成立就执行退出操作。

转载于:https://www.cnblogs.com/BINGJJFLY/p/9525526.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25 Refs转发机制与在高阶组件中的使用

将子节点的ref暴露给父节点 16.3以上 Refs转发,将ref自动通过组件传递给子组件 1. 在父组件创建ref对象 2. 给子组件赋值ref 3. 通过React.forward向子组件转发ref属性 4. 父组件的ref对象指向子组件dom 5. ref参数只有在 React.forwardRef 组件内定义时可接受con…

26 JSX深度剖析与使用技巧

React对JSX的处理 React.createElement有三个参数&#xff1a;标签类型&#xff0c;属性集合&#xff0c;子元素 JSX其实是React.createElement函数调用的语法糖 JSX → 编译 → React.createElement调用形式 class App extends React.Component {render() {return (<div cl…

javascript --- 数组实用小技巧

一个数组:[a,b,c,d,e],希望满足以下2个条件: 1.当索引在第0个位置的时候,数组为[b,c,d,e],在第1个位置的时候,数组为[a,c,d,e] … 2.若索引i 和 索引 j 的值相等,则只执行1次. 效果如下: nums [1,2,3,4] nums [1,1,1,2,2,3,4] 实现如下: let nums [1,1,1,2,2,3,4]; let le…

Http的持久连接和管线化

【要点】 1. 什么是持久连接&#xff1f; 2. 什么是管线化&#xff1f; 【总结】 1.什么是持久连接&#xff1f; (keep alive模式) HTTP1.1规定了默认保持长连接&#xff08;HTTP persistent connection &#xff0c;也有翻译为持久连接&#xff09;;数据传输完成了保持TCP连接…

Hexo 版本

Mac hexo s 启动Hexo服务报错如下&#xff1a; Error: The module /usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0dtrace-provider/build/Release/DTraceProviderBindings.node was compiled against a different Node.js version using NODE_MODULE_VERSION 48. T…

dart --- 简单的闭包

首先得明白下面2点: 全局变量的特点:常驻内存,污染全局变量局部变量的特点:会被垃圾回收机制回收,不会污染作用域… // 闭包.dart void main(){myClosure(){var a 0; // a是一个局部变量.函数执行完毕后将被清理return (){a;print(a);};}var fn myClosure();fn();fn();fn()…

27 JSX函数子元素的应用与思考

JSX的props.children和props本身有部分一致的特性 props.children可以传递任何类型的子元素 // 调用子元素回调 num 次&#xff0c;来重复生成组件 function Repeat(props) {// 返回一组JSXlet items [];for (let i 0; i < props.num; i) {items.push(props.children(i));…

Python学习day12(生成器,列表/生成器推导式)

Python学习day12(生成器&#xff0c;列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种&#xff1a;一种是调用方法直接返回的&#xff0c;一种是可迭代对象通过执行iter方法得到的&#xff0c;迭代器有的好处是可以节省内存。 如果在某些情况下&#xff0c;我们也…

Cascader 级联选择器

当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。 通过expand-trigger可以定义展开子级菜单的触发方式。 本例还展示了change事件&#…

es6 --- String.prototype.padStart

从实际出发理解. 首先看下面代码 // js var dt new Date(); console.log(dt);下面想把时间格式化,写一个dateFormat函数 // js function dateFormat(data){var dt new Date(data);var y dt.getFullYear();var m dt. getMonth() 1;var d dt.getDate();var hh dt.getHo…

1 redux初探、用react开发数值增值案例

含义 Redux是专门用作状态管理的js库&#xff0c;不是react插件库可以用在react、angular、vue等项目中能集中式管理react应用中多个组件共享的状态 使用 npx create-react-app redux1 cnpm install redux -S关键字 storereduceractionsubscribe 案例 1. 创建store、并传…

Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

Python学习笔记_1_基础_2&#xff1a;数据运算、bytes数据类型、.pyc文件&#xff08;什么鬼&#xff09; 一、数据运算 Python数据运算感觉和C&#xff0c;Java没有太大的差异&#xff0c;百度一大堆&#xff0c;这里就不想写了。比较有意思的是三元运算&#xff0c;记得C和Ja…

LeetCode 8. String to Integer (atoi)

问题链接 LeetCode 8. String to Integer (atoi) 题目解析 字符串转换成数字。 解题思路 个人认为题目并没有完全讲清楚题意。最初以为需要考虑多种情况&#xff0c;小数啊指数啊什么的&#xff0c;后面发现不是这样的&#xff0c;这题只要关注字符数字问题以及范围问题。 1.跳…

javascript --- 实战中体会jsonp

准备:1.需要node环境,node环境配置 -> 百度搜索 “node环境配置” (网上太多了) node是否安装成功指令如下: 创建如下页面结构: html结构如下: // jsonp.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

2 中间件的使用、异步action的创建

react-redux是react插件 将所有组件分成两大类&#xff1a;UI组件和容器组件 安装npm install react-redux -S UI组件&#xff1a; 只负责UI的呈现&#xff0c;不带有任何业务逻辑不使用this.state所有数据都由this.props提供不使用任何Redux的API&#xff0c;不需要使用store …

PHP数组函数

整理了一份PHP开发中数组操作大全&#xff0c;包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。 一、数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名ar…

Android Stadio 相关

这几天&#xff0c;电脑坏了。重装系统&#xff0c;慢慢的学到了很多Android stadio 的相关知识。总结一下吧&#xff1a; 1.gradle 编译工具&#xff1a;在工程的gradle/wrapper/gradle–wrapper.properties 里面设置gradle 的版本。 distributionUrlhttps://services.grad…

1 State Hook

Hook&#xff0c;使用在函数组件中不要在循环&#xff0c;条件或嵌套函数中(if、switch、for)调用 Hook 1. 函数指向相同的引用 更新方式&#xff1a;函数组件中state变化时才重新渲染&#xff08;React使用Object.is比较算法来比较state&#xff09;&#xff1b;而类组件每次…

⊰第五篇⊱ 队列

队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIFO。允许插入的一端为队尾&#xff0c;允许删除的一端为队头。队列不…

es6 --- 数组的扩展

经常遇到对数组的操作…下面是《ES6标准入门》(第3版)中对数组扩展的(部分)描述: 扩展运算符(…): console.log(...[1,2,3]) // 1 2 3console.log(1, ... [2,3,4], 5) // 1 2 3 4 5扩展运算符代替数组的apply方法 // ES5 function f(x,y,z) {// ... } var args [1,2,3]; f.a…