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

广州网站建设360元wordpress 3.9.2 漏洞

广州网站建设360元,wordpress 3.9.2 漏洞,局域网网站开发,17做网店一件代发1. 场景 在WEB开发#xff0c;客户端和服务端传输的数据中经常包含一些这样的字段#xff1a;字段的值只包括几个固定的字符串。 这样的字段意味着我们需要在数据传输对象#xff08;Data Transfer Object, DTO#xff09;中对该字段进行校验以避免客户端传输的非法数据持…1. 场景 在WEB开发客户端和服务端传输的数据中经常包含一些这样的字段字段的值只包括几个固定的字符串。 这样的字段意味着我们需要在数据传输对象Data Transfer Object, DTO中对该字段进行校验以避免客户端传输的非法数据持久化到我们的系统中。 public record UserCreateDto(String userName,// userType的值为NORMAL, SILVER_CARD, GOLD_CARD String userType) {}我们可以采用多种办法验证userType的正确性如 方法一利用Validation和正则表达式进行验证 public record UserCreateDto(String userName,// userType的值为NORMAL, SILVER_CARD, GOLD_CARDPattern(regexp ^NORMAL$|^SILVER_CARD$|^GOLD_CARD$)String userType) { }方法二在代码中写validate方法在使用到DTO代码中调用validate方法 public record UserCreateDto(String userName,// userType的值为NORMAL, SILVER_CARD, GOLD_CARDString userType) {public void validate() {if (List.of(NORMAL, SILVER_CARD, GOLD_CARD).contains(userType)) {return;}throw new IllegalArgumentException(userType must be NORMAL, SILVER_CARD, GOLD_CARD);} }比较这两种方法两种方法各有优缺点 优点缺点方法一在DTO创建时即参数的入口处就可以验证数据的有效性在Pattern中使用字符串常量不方便意味着开发者很难在整个代码中使用统一的自定义常量为后期的修改带来不便方法二开发者可以在整个代码中使用统一的自定义常量方便后续的修改需要开发者主动调用validate方法容易遗漏调用 2. 面向对象的解决办法 可能你早已想到用枚举来解决上述场景中的问题没错在面向对象编程中枚举是解决这种问题的最好的解决办法。 public enum UserType {NORMAL, SILVER_CARD, GOLD_CARD }public record UserCreateDto(String userName,// userType的值为NORMAL, SILVER_CARD, GOLD_CARDNotNullUserType userType) { }枚举让我们的参数具有类型约束并且具有可复用性和易修改等特性。 但是在SpringBoot中默认是不支持String到Enum的转换读者可以尝试一下不管客户端传入的userType正确与否在DTO中userType值均为null 。 为了解决这个问题很多开发者都是通过自定义Conveter来进行String到Enum的转换的。如此常见的场景作为开发者的我们都能想到使用统一的Converter难到作为框架的开发者想不到 3. 一行代码解决String到Enum的转换问题 先上解决方案。 Configuration public class WebMvcConfiguration implements WebMvcConfigurer {Overridepublic void addFormatters(FormatterRegistry registry) {// 通过ApplicationConversionService向应用中注入ConverterApplicationConversionService.configure(registry);}就是这么简单在应用中自定义WebMvcConfigurer覆写addFormatters方法并通过ApplicationConversionService向应用中注入String到Enum的Converter。 4. 原理分析 通过分析ApplicationConversionService的时序图我们可以看到ApplicationConversionService最终通过DefaultConversonService调用ConverterRegister向应用注册了StringToEnumConverterFactory从名字可以看出来StringToEnumConverterFactory就是负责String向Enum转换的。 StringToEnumConverterFactory的代码如下 final class StringToEnumConverterFactory implements ConverterFactoryString, Enum {Overridepublic T extends Enum ConverterString, T getConverter(ClassT targetType) {return new StringToEnum(ConversionUtils.getEnumType(targetType));}private static class StringToEnumT extends Enum implements ConverterString, T {private final ClassT enumType;StringToEnum(ClassT enumType) {this.enumType enumType;}OverrideNullablepublic T convert(String source) {if (source.isEmpty()) {// Its an empty enum identifier: reset the enum value to null.return null;}return (T) Enum.valueOf(this.enumType, source.trim());}} }可以看出StringToEnumConverterFactory中也是通过Enum的valueOf方法完成String到Enum的转换的。 5. 方案的不足 采用Spring框架提供的StringToEnum Converter带给我们便利性的同时也存在一些约束如 Enum中实例的大小写必须和字符串的大小写一致如字符串是小写的normal、silver_card、gold_cardEnum定义的实例也必须是normal、silver_card、gold_card这个可能并不符合代码规范通常Enum的实例都要球全大写字符串中包含一些特殊字符是Java命名规范不允许的如中划线。 因此选用哪种方法完成字符串到Enum的转换还要根据实际的应用场景出发。
http://www.dnsts.com.cn/news/239450.html

相关文章:

  • 长春网站建设net网站建设报价表模板
  • 七台河北京网站建设站长工具seo综合查询外部链接数量
  • 多光营销软件网站个人简历模板完整版
  • 文山州住房和城乡建设网站seo搜索优化工程师招聘
  • 嘉兴网站平台建设设计说明生成器
  • 公司做网站哪个好用php做网站要用构架吗
  • 潍坊网站建设中公有网站建设的虚拟主机管理系统
  • 宜昌网站建设厂家win2008安装wordpress
  • 网站建设课设心得推荐家居企业网站建设
  • 做网站需要服务器和什么seo网站关键词优化费用
  • 网站下载不了的视频怎么下载微信网页版官网下载安装
  • 用cdr做网站设计尺寸要多少广州注册公司需要什么资料
  • 做一个网站推广wordpress主题企业
  • 什么是网站建设外包网站建设 设计
  • 广州怎么做网站网页设计与网站建设的区别
  • 微网站设计方案表白二维码图片
  • 北京兼职做网站推广nike建设网站的目的
  • 德州宁津建设局网站长春网站建设专业公司
  • 做网站的优势有哪些建设执业注册中心网站
  • 网站备案管局审核智慧企业解决方案
  • 厦门网站建设中心优化游戏的软件
  • 权威的手机网站制作闵行北京网站建设
  • 营销型网站制作方法苏州首页关键词优化
  • 男女生做爰视频网站江西网站建设平台
  • 16年百度对泛解析网站的惩罚广东广州番禺区
  • wordpress暂停网站惠州seo按天付费
  • 深圳网站制作必选祥奔科技济南品牌网站建设公司
  • 成都有做公司网站的公司吗找人做app网站
  • 代做ppt的网站建设部网站退休注册人员
  • 建设网站思维导图那些免费网站可以做国外贸易