当前位置:网站首页>ThreadLocal存储当前登录用户信息
ThreadLocal存储当前登录用户信息
2022-07-24 05:19:00 【青临emo】
ThreadLocal可以将用户信息保存在线程中,当请求结束后我们在把保存的信息清除掉。这样我们才开发的时候就可以直接从全局的ThreadLocal中很方便的获取用户信息
/** * 保存用户对象的ThreadLocal * * @author wangql */
@Component
public class UserInfoThreadHolder {
private static final ThreadLocal<SysUser> userThreadLocal = new ThreadLocal<>();
/** * 添加当前登录用户方法 */
public static void addCurrentUser() {
//登录对象从这里获取然后set进ThreadLocal
//具体根据业务逻辑来
SysUser sysUser = new SysUser();
userThreadLocal.set(sysUser);
}
public static SysUser getCurrentUser() {
return userThreadLocal.get();
}
/** * 防止内存泄漏 */
public static void remove() {
userThreadLocal.remove();
}
}
可以利用拦截器操作
/** * 将登录用户存入ThreadLocal * @author wangql */
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
UserInfoThreadHolder.addCurrentUser();
return true;
}
/** * 避免内存泄露 */
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserInfoThreadHolder.remove();
}
}
注册拦截器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**");
}
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addExposedHeader("Authorization");
return corsConfiguration;
}
/** * 配置跨域 * @return */
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
边栏推荐
- Canvas - fill
- 【activiti】activiti入门
- Logic development analysis of LP dual currency liquidity pledge mining system
- Moonbeam Orbiters Program:为收集人参与 Moonbeam 和 Moonriver 提供新方式
- mysql数据库的授权访问
- Flink Format系列(1)-JSON
- Restore UI design draft
- Substrate technology and ecology June memorabilia | Polkadot decoded came to a successful conclusion, and the hacker song winning project injected new forces into the ecosystem
- Flink 时间流处理
- 【activiti】组任务
猜你喜欢

Flink watermark mechanism

黑龙江省SVG格式地图的创建及生成

【mycat】mycat相关概念

Vulnhub-Funbox: Rookie(Funbox2)靶机渗透

How to forcibly uninstall Google browser? Don't worry about Google opening as a whiteboard. It's effective for personal testing.

Insanity:1(Insanity-Hosting)靶机渗透 —Vulnhub

Insanity:1 (insanity hosting) target penetration vulnhub

【mycat】mycat介绍

Vulnhub funbox: rookie (funbox2) target penetration

波卡生态发展不设限的奥义——多维解读平行链
随机推荐
Flink task, sub task, task slot and parallelism
Wechat applet reports an error request:fail -2:net:: err_ FAILED
达梦数据库_支持数据类型总结
highcharts使用自定义矢量地图
Three -- orbitcontrols track controller
达梦数据库_常用的用户管理命令
稀缺性之于Web3:如何成为去中心化世界的胜利者
盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣
XML之建模
Vulnhub-Funbox: Rookie(Funbox2)靶机渗透
Insanity:1 (insanity hosting) target penetration vulnhub
【百度地图API】您所使用的地图JS API版本过低,已不再维护,为保证地图基本功能 正常使用,请尽快升级到最新版地图JS API
在 Polkadot 中进行创建的三种方式 —— 平行链、平行线程、智能合约
Moonbeam orbiters program: provides a new way for collectors to participate in moonbeam and Moonriver
Flink函数(2):CheckpointedFunction
CESS 测试网上线!首个提供多元应用场景的去中心化存储网络
Flink重启策略
开启Web3,曾经冷门的去中心化身份(DID)
Flink函数(1):rich function
量化合约夹子套利机器人系统逻辑开发原理分析