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

java 自定义xss校验注解实现

自定义一个注解@Xss。名字随意

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 自定义xss校验注解* * @author chfatech*/
@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER })
@Constraint(validatedBy = { XssValidator.class })
public @interface Xss
{String message()default "不允许任何脚本运行";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

validator校验类:XssValidator。这个校验类要和上面的@Xss注解上的

@Constraint(validatedBy = { XssValidator.class })对应

import com.chfatech.common.utils.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 自定义xss校验注解实现* * @author chfatech*/
public class XssValidator implements ConstraintValidator<Xss, String>
{private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />";@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext){if (StringUtils.isBlank(value)){return true;}return !containsHtml(value);}public static boolean containsHtml(String value){Pattern pattern = Pattern.compile(HTML_PATTERN);Matcher matcher = pattern.matcher(value);return matcher.matches();}
}

具体使用在某个字段上加上注解;形如:

@Data
public class HomeQuery {@ApiModelProperty(name = "keyword",value = "搜索关键词")@Xss@SqlInject(message = "{exists.illge.word}")private String keyword;@ApiModelProperty(name = "sdgId",value = "sdg主键id")private Long sdgId;
}

然后在控制层中增加@Validated注解校验就可以了

 以上代码实现后。会自动针对某些增加了@Xss字符进行校验。如果想增加sql注入校验。以上方法类似

http://www.lryc.cn/news/122314.html

相关文章:

  • Selenium图片滑块验证码
  • CAP理论与MongoDB一致性,可用性的一些思考
  • lc2536.子矩阵元素加1
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例
  • Patch SCN一键解决ORA-600 2662故障---惜分飞
  • const、指针、引用的综合
  • gitee linux免密/SSH 方式连接免登录
  • 计网第一章
  • windows升级记
  • 【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】
  • 现代无人机技术
  • 【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析
  • 渐进增强和优雅降级区别
  • 使用provision创建的arxml文件,导入到第三方工具需要注意哪些方面?
  • Node.js的核心模块——path
  • 【MAC】 M2 brew安装 docker 运行失败 解决
  • iPhone苹果手机触屏失灵无法关机,如何强制重启
  • SQL-每日一题【1484. 按日期分组销售产品】
  • java重写与重载的区别
  • Unity 框架学习--1
  • ERROR: While executing gem ... (Gem::FilePermissionError)
  • QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板
  • 微服务03-RabbitMQ
  • QtCreator ui设置界面 Layout 的属性 layoutStretch
  • APP外包开发的iOS开发语言
  • sentinel客户端和dashboard交互
  • vue或uniapp使用pdf.js预览
  • virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址
  • git unable to get local issuer certificate (_ssl.c:1007)>
  • QT之时钟