holder java_HostHolder-持有用户信息,用于代替session对象-程序员宅基地

技术标签: holder java  

HostHolder-持有用户信息,用于代替session对象

实体类

HostHolder.java

/**

* 持有用户信息,用于代替session对象

* @Author: ANTIA1

* @Date: 2021/2/12 16:49

*/

@Component

public class HostHolder {

private ThreadLocalUser users = new ThreadLocal();

public void setUser(User user){

users.set(user);

}

public User getUser(){

return users.get();

}

public void clear(){

users.remove();

}

}

自定义拦截器

LoginTicketInterceptor.java

/**

* @Author: ANTIA1

* @Date: 2021/2/12 16:36

*/

@Component

public class LoginTicketInterceptor implements HandlerInterceptor {

@Autowired

UserService userService;

@Autowired

HostHolder hostHolder;

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//从Cookie中获取凭证

String ticket = CookieUtil.getValue(request, "ticket");

if (ticket!=null){//说明已经登录了

//查询凭证

LoginTicket loginTicket = userService.findLoginTicket(ticket);

//检查凭证是否有效

if(ticket!=null loginTicket.getStatus()==0 loginTicket.getExpired().after(new Date())){

//根据凭证查询用户

User user = userService.findUserById(loginTicket.getUserId());

//在本次请求中持有用户

hostHolder.setUser(user);

}

}

return true;

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

User user = hostHolder.getUser();

if (user !=null modelAndView !=null){

modelAndView.addObject("loginUser",user);

}

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

hostHolder.clear();

}

}

配置拦截器

WebMvcConfig.java

/**

* @Author: ANTIA1

* @Date: 2021/2/12 16:09

*/

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Autowired

LoginTicketInterceptor loginTicketInterceptor;

/**

* 添加自己的拦截器

* @param registry

*/

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginTicketInterceptor)

.excludePathPatterns("/**/*.css","/**/*.js","/**/*.png","/**/*.jpeg");

}

}

HostHolder-持有用户信息,用于代替session对象 相关文章

Python:input(用户交互)

shell中用户交互使用read -p,在python3中用户交互使用input python2.x中用户交互使用raw_input,python2中也有input但是属于毫无用处的一种写法,可以直接忽略掉,于是python3中舍弃了这种写法改为直接使用input 以下为input的基本使用方法: name = input(

SQL常用语句1

mySQL常用SQL语句 【零】用户管理 新建用户 CREATE USER user_name IDENTIFIED BY 'password'; 更改密码 SET PASSWORD FOR user_name = PASSWORD('newpassword'); 权限管理 SHOW GRANTS FOR user_name; --查看name用户权限GRANT SELECT ON db_name.* TO user

Java流程控制01

Java流程控制 用户交互Scanner Scanner对象 next() 一定要读取到有效字符后才可以结束输入 输入有效字符前遇到 空白 ,next()方法会自动抹去(hello world) 只有输入有效字符后才将其后面输入的空白作为 分隔符 或者 结束符 next()不能得到带有空格的字符串

基于mysql验证的vsftpd虚拟用户

目录 1、在数据库服务器上安装mysql数据库 2、在数据库服务上配置数据库支持vsftp服务 3、在ftp服务器上安装vsftpd和pam_mysql包 4、 在FTP服务器上建立pam认证所需文件 5、 建立相应用户和修改vsftpd配置文件 6、在FTP服务器上配置虚拟用户具有不同的访问权

转:SharePoint 2013 使用JQuery 一些记录如(SharePoint js 获得当前用户)等基本操作。

SharePoint 2013 使用JQuery 一些记录。 REST API 引用和示例 https://msdn.microsoft.com/zh-cn/library/jj860569.aspxRest APIhttps://msdn.microsoft.com/zh-cn/magazine/dn198245.aspxsharepoint Js 获得当前用户 this.context = new SP.ClientContext.g

13

流程控制1 用户交互Scanner java.util.Scanner是Java 5的新特性,可以获取用户的输入。 基本语法 Scanner s = new Scanner(System.in); 在读取前一般需要使用hasNext()与hasNextLine()来判断是否还有输入的数据。 Scanner对象 ScannerNext 一定要读到有效字

刷抖音用户看《价值》记录

人生中所有的际遇和挑战,可能都会帮助人走向星辰大海。 遇事不要慌张,遇到好事也不要得意忘形都只是成长的燃料。成功失败都值得使用同样的策略,复盘和改进。 自律、洞见、进化和学习是自我建设的核心能力 自律要加强。 相信自己的判断,做事要果断。 @tod

三、Java流程控制

用户交互Scanner Scanner对象 创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串, 在读取前我们一般需要 使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。 next

用户登录

# !/usr/bin/env python# -*- coding:utf8 -*-import hashlibdef login(username, pwd): with open("user.db", 'r', encoding='utf-8') as f: while True: line = f.readline() if line: user, password = line.strip().split("|") if user == username and

Django入门-登录(写死用户名、密码)

django入门介绍:https://www.cnblogs.com/feifei-cyj/p/11029307.html 1、新建django项目 django-admin startproject loginDemo 2、新建app django-admin startapp loginApp 3、pycharm打开新建的django项目 4、settings增加app名称 5、修改url.py文件 from

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36303045/article/details/114996044

智能推荐

uni-app在App平台如何实现升级更新?_uni-app在app平台如何实现升级更新?-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏39次。使用 uni-app 开发,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级。uni-app发布为小程序的升级模式较简单,只需将开发完的代码提交小程序后台,待审核通过后用户将自动升级。App端的升级,又分为整包更新和资源热更新两种。整包更新,即常规的整个App安装包重新下载安装。资源热更新,即App并重新安装,里面的js等前端代码进行更新。资源热更新另见文档:http://ask.dcloud.net.cn/article/35667本文重点讲解整包更_uni-app在app平台如何实现升级更新?

JAVA MD5加密-程序员宅基地

文章浏览阅读3.4w次,点赞23次,收藏77次。一、什么是MD5加密MD5,全称为“Message Digest Algorithm 5”,中文名“消息摘要算法第五版”,它是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。严格来说,它是一种摘要算法,是确保信息完整性的。不过,在某种意义上来说,也可以算作一种加密算法。MD5 算法具有很多特点:压缩性:任意长度的数据,算出的MD5值长度都是固_java md5

android 系统中修改ANR timeout 时间_android 13 anr超时时间修改-程序员宅基地

文章浏览阅读2.6k次。ANR产生的原因只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有两种。1 当前的事件没有机会得到处理,例如UI线程正在响应另外一个事件,当前事件由于某种原因被阻塞了。2 当前的事件正在处理,但是由于耗时太长没能及时完成。根据ANR产生的原因不同,超时时间也不尽相同,从本质上讲,产生ANR的原因有三种,大致可以对应到Android 中四大组件中的三个(Activity/Vi..._android 13 anr超时时间修改

1分钟了解JAVA与大数据之间的关系_java 和大数据的关系-程序员宅基地

文章浏览阅读377次。大数据无疑是目前IT领域的最受关注的热词之一。几乎凡事都要挂上点大数据,否则就显得你OUT了。如果再找一个可以跟大数据并驾齐驱的IT热词,JAVA无疑是跟大数据并驾齐驱的一个词语。很多人在提到大数据的时候总会想到JAVA,那么java和大数据到底有什么关系?Java是什么一提起JAVA,大家都不陌生,Java是一门高级的网络编程语言,对于我们现在所用的软件及APP都是后台java编写出来的,对于大数据来说java是一门基础的工具类语言,Java语言具有功能强大和简单易用两个特征。Java语言作._java 和大数据的关系

rust 区块链开发_在Rust和基材中构建区块链:[开发人员分步指南]-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏5次。rust 区块链开发 关于如何在开放源码框架Substrate中构建核心区块链基础架构的初学者友好教程。 在这个自我指导的教程中,您将从头开始构建无气体,类似比特币的区块链。 您将了解到,区块链比智能合约功能强大得多。 随意将这些内容的任何用途重新用于举办您自己的研讨会! 您将学到什么: 实施UTXO分类帐模型,比特币的会计机制 更改网络事务池逻辑 配置创世块并编写一些..._开发区块链,rust需要掌握到什么程度

C++/Qt:C++test单元测试框架_c++test 单元测试-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏67次。本文简要描述了如何在C++test中进行mingw环境下qt的单元测试方法,以及一些c++test的使用小技巧。_c++test 单元测试

随便推点

uni-app 清除手机app缓存_uniapp app安卓需要清掉缓存才能继续安装-程序员宅基地

文章浏览阅读251次。【代码】uni-app 清除手机app缓存。_uniapp app安卓需要清掉缓存才能继续安装

JUC并发编程详解_juctb-程序员宅基地

文章浏览阅读254次。completion stage:代表异步计算过程中的某个阶段一个阶段完成以后可能会触发另一个阶段在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组completableFuture 的方法。它可能代表一个明确完成的Future,也有可能代表一个完成阶段〈CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作。_juctb

JdbcTemplate介绍-程序员宅基地

文章浏览阅读1.3k次。JdbcTemplate介绍JdbcTemplate概念使用JdbcTemplate的准备工作操作数据库(增)操作数据库 (修改和删除)操作数据库 (查询)查询返回某个值查询返回对象查询返回集合操作数据库 (批量添加)操作数据库 (批量修改和删除)  操作数据库增//创建sql语句String sql = "insert into t_book values(?,?,?)";Object[] args = {book.getUserid(), book.getUsername(), book.

30分钟快速食取JDBC-程序员宅基地

文章浏览阅读173次。练习数据库来源:传送门一、认识JDBCJDBC(Java DataBase Connectivity)是Java语言连接数据库JDBC的本质JDBC是由SUN公司制定的一套接口(interface)接口都有调用者和实现者。什么是面向接口编程面向接口调用面向接口写实现类面向接口编程的特点解耦合:降低程序的耦合度,提高程序的扩展力二、JDBC开发前的准备工作...

MongoDB安装配置教程(详细版)_mongodb安装教程-程序员宅基地

文章浏览阅读3.7w次,点赞92次,收藏410次。Windows如何配置MongoDB,设置环境变量以及命令窗口启动_mongodb安装教程

CS分发结构和P2P分发结构的时间计算_p2p分发时间计算例题-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏22次。考虑向N个对等方(用户)分发F=15Gb的一个文件。该服务器具有us=30Mbps的上传速率,每个对等方的下载速率di=2Mbps,上传速率为u。请分别针对客户-服务器分发模式和P2P分发模式两种情况,对于N=10、100和1000以及u=500kbps、1Mbps和2Mbps的每种组合,绘制最小分发时间图表。(注:k=10^3、M=10^6、G=10^9)答:1)对于CS分发模式,最小分..._p2p分发时间计算例题