当前位置: 首页 > news >正文

自己做动漫头像的网站智慧团建登录平台入口

自己做动漫头像的网站,智慧团建登录平台入口,南山高端网站建设,微信公众号自己微网站吗一、背景 在我们日常项目中#xff0c;常常会将用户的认证信息存入缓存中#xff0c;方便我们在程序执行中#xff0c;进行获取用户信息。本篇文章主要是介绍使用自定义注解和AOP切面技术进行实现#xff0c;这也也是非常容易使用的。 二、代码详解 2.1 自定义注解 定义…一、背景 在我们日常项目中常常会将用户的认证信息存入缓存中方便我们在程序执行中进行获取用户信息。本篇文章主要是介绍使用自定义注解和AOP切面技术进行实现这也也是非常容易使用的。 二、代码详解 2.1 自定义注解 定义一个注解用于标记需要自动注入当前用户信息的方法。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface InjectCurrentUser { }2.2 创建切面 创建一个切面来拦截所有标记了InjectCurrentUser注解的方法并在调用它们之前获取当前用户信息然后作为参数传递给这些方法注意Java的方法签名在编译时是固定的不能直接向现有方法添加参数。因此这里假设我们修改方法签名以接受用户信息作为参数或者使用其他方式如ThreadLocal。 Aspect Component public class UserAspect { Before(annotation(InjectCurrentUser)) public void beforeMethod(JoinPoint joinPoint) { Authentication authentication SecurityContextHolder.getContext().getAuthentication(); if (authentication ! null authentication.getPrincipal() instanceof UserDetails) { UserDetails userDetails (UserDetails) authentication.getPrincipal(); UserContextHolder.setCurrentUser(userDetails); // 如果需要可以在这里添加日志或其他逻辑 System.out.println(Setting current user: userDetails.getUsername()); } } // 可以添加一个After或AfterReturning切面来清除ThreadLocal中的用户信息 // 这样做是为了避免内存泄漏尤其是在长时间运行的线程或线程池中 After(annotation(InjectCurrentUser)) public void afterMethod(JoinPoint joinPoint) { UserContextHolder.clearCurrentUser(); } }2.3 创建ThreadLocal存储用户信息 定义一个ThreadLocal来存储当前用户的信息比如UserDetails public class UserContextHolder { private static final ThreadLocalUserDetails currentUser new ThreadLocal(); public static void setCurrentUser(UserDetails userDetails) { currentUser.set(userDetails); } public static UserDetails getCurrentUser() { return currentUser.get(); } // 清除ThreadLocal中的用户信息避免内存泄漏 public static void clearCurrentUser() { currentUser.remove(); } }2.4 业务逻辑中获取用户信息 业务逻辑中通过UserContextHolder.getCurrentUser()来获取当前用户的信息 public class SomeService { public void someBusinessMethod() { UserDetails user UserContextHolder.getCurrentUser(); if (user ! null) { // 使用用户信息进行业务逻辑处理 System.out.println(Doing something with user: user.getUsername()); } } }三、总结 内存泄漏ThreadLocal可能会导致内存泄漏特别是当使用线程池时因为线程可能会被重用而ThreadLocal中的值可能不会被自动清除。因此在不再需要时显式清除ThreadLocal中的值是一个好习惯。 依赖注入尽管在这个例子中我们使用了AOP来设置ThreadLocal但在某些情况下你可能还想通过依赖注入来传递用户信息特别是当你需要在多个组件或服务之间共享用户信息时。然而对于跨线程或跨方法调用的情况ThreadLocal通常是一个更好的选择。
http://www.dnsts.com.cn/news/158957.html

相关文章:

  • 邢台兼职网站有哪些?响应式网站导航栏
  • 四川省建设工程造价信息网站wordpress edu v2.0
  • 盟族网站建设长沙市天心区城乡建设局网站
  • 阿里云oss做网站wordpress 漫画在线
  • 网站建设公司西安硅塑胶 东莞网站建设
  • 网络水果有哪些网站可以做济南企业免费建站
  • 校园二手网站建设目的意义个人网页设计实验报告
  • 单页面网站 seo做网站seo推广公司
  • 东营集团网站建设销售策划
  • 河北手机网站制作企业医院互联网网站建设
  • 网站建设和淘宝店装修是不是一样杭州市在建工程项目
  • 怎样建立个人的网站东凤镇做网站公司
  • 源码分享站网站建设与规划心得总结
  • 佛山微网站推广苏州论坛
  • 网站设计师待遇免费模板下载网站
  • 深圳外贸网站开发建设网站抽奖模块怎么做
  • 纯jsp做的留言板网站西安机械加工网
  • 建站工具搭建前台网站重庆网站免费优化
  • wordpress 开启多站点网站有效内容的宣传及推广
  • 免费建站网站一级大录像不卡在线看网页抖音小程序推广怎么做
  • 上海网站建设企业一个网站网站建设下来要花多少钱
  • 网站建设公司类型大连做企业网站排名
  • 信用 网站 建设方案网站简介 更改
  • 中小型网站建设流程企业网站建设兴田德润怎么联系
  • 溧水做网站自助服务平台
  • 化肥网站模板如何做网站页面赚钱
  • 做网站公司常熟微商城系统开发
  • 买个域名就可以建立网站吗昆山市建设工程质量检测中心网站
  • 如何用手机网站做淘宝客短视频营销优势
  • 深圳网站制作公司信息菜鸟教程网站怎么做