用ThreadLocal保存当前用户登录状态.在拦截器中获取登录用户的信息,并封装在ThreadLocal中,此后当前线程的调用过程中,都可以非常简单的获取登录用户的信息.
1. 拦截器(SpringMVC)
public class SecurityFilter implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { //1) 从cookie中,或者请求的header中,获取有关认证信息 //2) 或者从其他地方获取用户信息,比如DB,cache中等. LoginContext context = new LoginContext(user); LoginContextHolder.set(context); } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { //To change body of implemented methods use File | Settings | File Templates. } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { LoginContextHolder.remove();//清理 } }
2. LoginContext.java
public class LoginContext { private User user; public LoginContext(User user){ this.user = user; } public boolean isLogin(){ return user == null ? false : true; } public User getLoginUser(){ return user; } }
3. LoginContextHolder.java
public class LoginContextHolder { private static final ThreadLocal<LoginContext> holder = new ThreadLocal<LoginContext>(); public static void set(LoginContext context){ if(context != null){ holder.set(context); } } public static LoginContext getContext(){ return holder.get(); } public static void remove(){ holder.remove(); } public static boolean isLogin(){ LoginContext context = getContext(); if(context == null){ return false; } return context.isLogin(); } public static User getLoginUser(){ LoginContext context = getContext(); if(context == null || !context.isLogin()){ return null; } return context.getLoginUser(); } }
相关推荐
C标准库源码
当你还在花大价钱包月实现视频音频提取时,看到了我,你有福了
(2025)糖医帮认证考试题库(附含答案).docx
C标准库源码
C标准库源码
基于遗传BP神经网络的飞机驾驶舱人机功能分配方法.pdf
(2025)全科医学科理论考试试题及答案.docx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
糖医帮认证考试试题及答案.docx
Python完整程序-坦克大战,含有完整的源码
Python完整程序-Python制作图形用户界面(GUI)让操作可视化,含有完整的源码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
康复医学概论考试题及答案.docx
超仿真原神抽卡压缩版-mihayou
2025年康复医学考试题(含答案).doc
(2025)康复医学概论考试题(含答案).doc
RSSIIndoorLocation-master
一种用于非侵入式负荷分解的改进时域卷积网络.pdf
C标准库源码