You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin使用LitRenderer时Bean是否完整暴露至客户端的疑问

Vaadin LitRenderer 数据传递与敏感字段处理
  • 关于官方示例的数据传递:如果示例是渲染Address相关内容,只会传递Address Bean而非完整Person Bean。LitRenderer的核心优势之一就是按需传递最小数据集合,减少前后端的数据传输量,以此提升性能,所以官方示例会遵循这个原则。

  • 针对含密码的User Bean处理:

    • 绝对不能把完整User Bean传给LitRenderer,密码属于敏感字段,哪怕前端不渲染,也能在浏览器开发者工具中被查看到,存在泄露风险。
    • 正确做法是创建一个仅包含渲染所需非敏感字段的DTO(数据传输对象),将User Bean中的非敏感数据映射到DTO后,再传递给LitRenderer。
    • 示例代码:
      // 定义用于渲染的DTO,只保留需要展示的字段
      public class UserRenderDTO {
          private String username;
          private String email;
          private Long id;
      
          // 从User Bean映射到DTO的静态方法
          public static UserRenderDTO fromUser(User user) {
              UserRenderDTO dto = new UserRenderDTO();
              dto.username = user.getUsername();
              dto.email = user.getEmail();
              dto.id = user.getId();
              // 严禁添加密码等敏感字段
              return dto;
          }
      
          // 对应的getter方法
          public String getUsername() { return username; }
          public String getEmail() { return email; }
          public Long getId() { return id; }
      }
      
      // 在Grid中使用LitRenderer传递DTO
      grid.addColumn(LitRenderer.<UserRenderDTO>of("<div>${item.username} - ${item.email}</div>")
              .withProperty("username", UserRenderDTO::getUsername)
              .withProperty("email", UserRenderDTO::getEmail))
              .setHeader("用户信息");
      
      // 将原始User列表转换为DTO列表后传入Grid
      List<UserRenderDTO> renderData = userList.stream().map(UserRenderDTO::fromUser).toList();
      grid.setItems(renderData);
      
    • 额外注意:所有涉及敏感数据的业务逻辑(比如密码验证、修改)都要放在后端处理,前端只负责展示非敏感的渲染数据,避免敏感信息暴露。

内容的提问来源于stack exchange,提问作者Marcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:24:33