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

家电照明电子通用网站模板微信菜单栏那些网站怎么做

家电照明电子通用网站模板,微信菜单栏那些网站怎么做,上海做网站的公司名称,空间设计网站大全SpringSecurity Context 获取和更改用户信息的问题 SecurityContext 异步线程中获取用户信息 今天在做项目时遇到了一个问题,我需要获取当前用户的 ID。之前,前端并没有存储用户信息,我一直是在后端的 service 中通过 SecurityContext 来获…

SpringSecurity Context 获取和更改用户信息的问题

SecurityContext 异步线程中获取用户信息

今天在做项目时遇到了一个问题,我需要获取当前用户的 ID。之前,前端并没有存储用户信息,我一直是在后端的 service 中通过 SecurityContext 来获取用户信息,这个方法之前一直有效。然而,今天在另一个 service 中调用时却无法获取到用户信息。

经过详细排查,发现 SecurityContext 的内容是与请求线程(如 HTTP 请求)绑定的。但我当前的 service 是用于处理 MQTT 消息,这属于异步线程。因此,在异步线程中无法从 SecurityContext 获取用户信息,只能另寻解决方案。

 /*** 处理接收到的设备数据,根据数据类型进行不同的处理。energy数据存储到数据库,其他数据通过WebSocket发送到前端展示。* @param data 数据内容*/private void handleIncomingData(String data) {....../** 通过设备ID找到用户ID, 不能通过securityContext获取当前用户ID,因为这里是异步处理消息,不在请求线程中。* 通过securityContext获取当前用户ID的方法只能在请求线程中使用,通常是与HTTP请求相关的操作才能获取到。* 这里是MQTT消息处理,不在请求线程中,所以要通过其他方式获取当前用户ID。* 还因为这里是存入数据库,因为也不能依赖物理设备的用户ID,设备不一定是存用户ID, 降低耦合性。TODO: 这里是否可以改进?*/long userId = deviceMapper.findDeviceById(deviceId).getUserId();if (userId<=0) {//如果userId<=0,说明没有找到对应的设备logger.error("Failed to get user id by device id: {}", deviceId);throw new RuntimeException("Failed to get user id by device id: " + deviceId);}Energy energy = new Energy();energy.setDeviceId(deviceId);energy.setEnergy(totalEnergy);energy.setRecordDate(recordDate);energy.setUserId(userId);......}

SecurityContext 线程降级问题

在项目中遇到 SecurityContext 线程降级的问题,具体场景是用户修改个人资料(如邮箱)后,我希望 SecurityContext 中的用户信息能及时更新。然而,在修改邮箱后,用户需要跳转到邮箱验证码验证页面,该页面通过 security 配置中的 permitAll() 允许匿名访问。

这个配置导致一个问题:虽然用户已经登录认证,但在访问 /verify-code 页面时,SecurityContext 中的身份会被降级为匿名用户,进而导致更新后的信息没有在 SecurityContext 中及时反映。

我了解到可以通过 setAuthentication() 手动更新 SecurityContext,但尝试后依然无法解决问题,更新后的用户信息仍旧无法及时同步到 SecurityContext 中~

   @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.csrf(AbstractHttpConfigurer::disable) // disable csrf.authorizeHttpRequests(authorize -> authorize.requestMatchers("/login","/register","/verify-code","/forgot-password","/change-password").permitAll()// permit request without authentication.requestMatchers("/ws/**").permitAll()// permit websocket request without authentication.anyRequest().authenticated()).addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class).logout(AbstractHttpConfigurer::disable);// disable logout otherwise it will conflict with our custom logoutreturn http.build();}
http://www.yayakq.cn/news/868610/

相关文章:

  • 网站设计费报价表网站建设营改增
  • 简单企业网站最新网站域名ip查询
  • 福建建设中心网站做影视网站需要多少钱
  • 百度移动网站建设有几种wordpress启用静态
  • 个人如何制作一个网站本地电脑如何做网站
  • 兰州网络推广关键词优化百度seo新规则
  • 昆山网站建设费用公司网站开发费用兴田德润在哪儿
  • 建设银行网站收费吗做网站需要收付款功能吗
  • 自己开发网站要多少钱文明网站建设总结
  • cms网站访问人数光学设计软件有哪些
  • 作业代做网站怎么创建微信公众号写文章
  • 门户网站分类深圳住 建设局网站首页
  • 国家重点项目建设网站网站会更改吗
  • 赌求网站开发网优工程师前景和待遇
  • 北京网站制作网络推广公司网站开发用到的研究方法
  • 温州开发网站公司哪家好美食网站建设
  • 网络传媒网站零基础做网站
  • 网站后台登陆代码重庆模板网站哪个好
  • 利用jquery做音乐网站公司内部网站怎么做
  • 专门做油站数据的网站html页面制作
  • 建建建设网站首页做网站无锡
  • 做宾馆网站好河南省住房和城乡建设工程信息网
  • 申请企业资助建设网站牛杂网这类网站怎么做的
  • 网站转app工具北京企业响应式网站建设
  • wordpress 慢 优化江苏怎么做网站排名优化
  • 做网站80端口做网站的要求
  • 买网站需要多少钱上海平台网站建设企业
  • 如何能去医疗网站做编辑合肥网站建设 八八四八
  • 网站建设实训室缩我短网址生成
  • 网站域名查询ipapache fastcgi wordpress