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.pswp.cn/news/35479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解與運用Android Jetpack ViewModel

在Android開發中&#xff0c;數據與界面的分離一直是一項重要的挑戰。為了解決這個問題&#xff0c;Google推出了Android Jetpack組件之一的ViewModel。ViewModel是一種用于管理UI相關數據的架構組件&#xff0c;它能夠幫助開發者實現優雅的數據驅動和生命周期管理。本文將深入…

C字符串練習題(6.3.1)

編寫一個程序&#xff0c;從鍵盤上讀入一個小于1000的正整數&#xff0c;然后創建并輸出一個字符串&#xff0c;說明該整數的值。例如&#xff0c;輸入941&#xff0c;程序產生的字符串是“Nine hundred and forty one”。 #include<stdlib.h> #include<string.h>…

前端HTML入門基礎

階段目標&#xff1a;掌握HTML、CSS常用布局技巧&#xff0c;能夠獨立制作網頁。 day01&#xff1a;HTML 基礎 目標&#xff1a;掌握標簽基本語法&#xff0c;能夠獨立布局文章頁。 01-今日課程介紹 今日目標&#xff1a;掌握標簽基本語法&#xff0c;能夠獨立布局文章頁。 核心…

SQL中CONVERT函數格式:CONVERT(data_type,expression[,style])

sqlserver convert()函數的使用方法_convert sqlserver_qq_37528515的博客-CSDN博客 SQL中CONVERT函數格式:CONVERT(data_type,expression[,style]) 說明&#xff1a; data_type:目標系統所提供的數據類型&#xff0c;如果轉換時沒有指定數據類型的長度&#xff0c;則 SQL Serv…

Maven基礎總結

前言 Maven 是一個項目管理工具&#xff0c;可以對 Java 項目進行構建、依賴管理。 基本要求掌握 配置Maven環境直接查。 得會在IDEA創建Maven的java項目吧、會創建Maven的web項目吧、會創建多模塊項目吧。 得會配置插件pligin、依賴dependency吧 一、Maven四大特性 1、…

CSS:服務器字體 與 響應式布局(用法 + 例子 + 效果)

文章目錄 服務器字體定義 服務器字體使用例子 響應式布局設備類型設備特性例子 服務器字體 解決字體不一致而產生的。 首先&#xff0c;在網上把字體下載好。 定義 服務器字體 font-face{font-family:字體名稱;src:url(字體資源路徑); }使用 在需要使用的選擇器里加上 font…

數學建模(一)前繼概念

課程推薦&#xff1a;數學建模老哥_嗶哩嗶哩_bilibili 目錄 一、什么是數學建模&#xff1f; 二、數學建模的一般步驟 三、數學建模賽題類型 1.預測型 2. 評價類 3.機理分析類 4. 優化類 一、什么是數學建模&#xff1f; 數學建模是利用數學方法解決實際問題的一種實踐。…

什么是多線程?進程和線程的區別是什么?如何使用Java實現多線程?

文章目錄 前言我們為什么要使用線程而不是進程來實現并發編程什么是線程進程和線程的區別如何使用Java實現多線程創建線程1.創建一個繼承 Thread 類的線程類2.實現 Runnable 接口匿名內部類方式實現 Runnable 接口lambda 表達式實現 Runnable 接口 Thread 類的常見構造方法Thre…

T113-S3-RTL8211網口phy芯片調試

目錄 前言 一、RTL8211介紹 二、硬件連接 三、設備樹配置 四、內核配置 五、phy芯片配置 六、調試問題 總結 前言 在嵌入式系統開發中&#xff0c;網絡連接是至關重要的一部分。T113-S3開發板搭載了RTL8211系列的網口PHY芯片&#xff0c;用于實現以太網連接。在開發過程…

C++ QT(二)

目錄 Qt 控件按鈕QPushButton控件簡介用法示例運行效果 QToolButton控件簡介用法示例運行效果 QRadioButton控件簡介用法示例運行效果 QCheckBox控件簡介用法示例運行效果 QCommandLinkButton控件簡介用法示例運行效果 QDialogButtonBox控件簡介用法示例運行效果 輸入窗口部件Q…

用 React+ts 實現無縫滾動的走馬燈

一、走馬燈的作用 走馬燈是一種常見的網頁交互組件&#xff0c;可以展示多張圖片或者內容&#xff0c;通過自動播放或者手動切換的方式&#xff0c;讓用戶能夠方便地瀏覽多張圖片或者內容。 本次實現的不是輪播圖而是像傳送帶一樣的無限滾動的形式。 二、需求梳理 走馬燈可設…

Go Gin 中使用 JWT

一、JWT JWT全稱JSON Web Token是一種跨域認證解決方案&#xff0c;屬于一個開放的標準&#xff0c;它規定了一種Token實現方式&#xff0c;目前多用于前后端分離項目和OAuth2.0業務場景下。 二、為什么要用在你的Gin中使用JWT 傳統的Cookie-Sesson模式占用服務器內存, 拓展性…

uniapp實現自定義導航內容高度居中(兼容APP端以及小程序端與膠囊對齊)

①效果圖如下 1.小程序端與膠囊對齊 2.APP端內容區域居中 注意&#xff1a;上面使用的是colorui里面的自定義導航樣式。 ②思路&#xff1a; 1.APP端和小程序端走不同的方法&#xff0c;因為小程序端要計算不同屏幕下右側膠囊的高度。 2.其次最重要的要清晰App端和小程序端…

【數學建模】清風數模更新5 灰色關聯分析

灰色關聯分析綜述 諸如經濟系統、生態系統、社會系統等抽象系統都包含許多因素&#xff0c;系統整體的發展受各個因素共同影響。 為了更好地推動系統發展&#xff0c;我們需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是積極的&#xff0c;哪些是消極的…

網絡基礎——網絡的由來與發展史

作者&#xff1a;Insist-- 個人主頁&#xff1a;insist--個人主頁 作者會持續更新網絡知識和python基礎知識&#xff0c;期待你的關注 目錄 一、網絡的由來 二、計算機網絡的發展史 1、第一階段 2、第二階段 3、第三階段 前言 每天都是使用網絡&#xff0c;那么你知道網絡…

FPGA----Vivado SDK創建并使用靜態鏈接庫(C/C++代碼移植)

1、在進行SoC開發時&#xff0c;PS端的C/C代碼可能涉及到核心算法需要移植操作&#xff0c;為此&#xff0c;本文講述了如何將C/C代碼打包為.a文件供程序調用 2、文章以我的程序為例&#xff0c;逐步講述代碼生成靜態鏈接庫并調用的方法。 下面是我程序的目錄結構&#xff0c…

spring boot實現實體類參數自定義校驗

安裝依賴項 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>1、新建實體類 Data public class UserEntity {private String name;private Integer age;…

RocketMQ 延遲消息

RocketMQ 延遲消息 RocketMQ 消費者啟動流程 什么是延遲消息 RocketMQ 延遲消息是指&#xff0c;生產者發送消息給消費者消息&#xff0c;消費者需要等待一段時間后才能消費到。 使用場景 用戶下單之后&#xff0c;15分鐘未支付&#xff0c;對支付賬單進行提醒或者關單處理…

PostgreSQL查詢慢sql原因和優化方案

PostgreSQL sql查詢慢優化方案有一下幾種解決方案&#xff1a; 1.關閉會話 查詢慢sql的執行會話&#xff0c;關閉進程。 查看數據庫后臺連接進程 SELECT count(*) FROM pg_stat_activity;SELECT * FROM pg_stat_activity; 查看數據庫后臺連接進程&#xff0c;但是此條SQL不…

python提取pdf圖片

import fitz import re import osdef save_pdf_img(path, save_path):path: pdf的路徑save_path : 圖片存儲的路徑# 使用正則表達式來查找圖片checkXO r"/Type(? */XObject)"checkIM r"/Subtype(? */Image)"# 打開pdfdoc fitz.open(path)# 圖片計數im…