最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot中攔截GET請求獲取請求參數(shù)驗證合法性核心方法

 更新時間:2023年08月11日 09:37:54   作者:想養(yǎng)一只!  
這篇文章主要介紹了Springboot中攔截GET請求獲取請求參數(shù)驗證合法性,在Springboot中創(chuàng)建攔截器攔截所有GET類型請求,獲取請求參數(shù)驗證內(nèi)容合法性防止SQL注入,這種方法適用攔截get類型請求,需要的朋友可以參考下

目的

在Springboot中創(chuàng)建攔截器攔截所有GET類型請求,獲取請求參數(shù)驗證內(nèi)容合法性防止SQL注入(該方法僅適用攔截GET類型請求,POST類型請求參數(shù)是在body中,所以下面方法不適用)。

核心方法

1、攔截 http://127.0.0.1:8088/api/checkTechCertInfoCancel?name=ljh 類型:

Map<String, String[]> parameterMap = request.getParameterMap();

2、攔截http://127.0.0.1:8088/api/checkTechCertInfoCancel/ljh 類型:

Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

完整代碼

創(chuàng)建攔截器

import com.alibaba.fastjson.JSON;
import com.boc.ljh.utils.Result;
import com.boc.ljh.utils.status.AppErrorCode;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @Author: ljh
* @ClassName SqlInterceptor
* @Description 攔截器 用于攔截GET請求校驗參數(shù)內(nèi)容
* @date 2023/8/9 10:12
* @Version 1.0
*/
@Component
public class SqlInterceptor implements HandlerInterceptor {
/**
* @Author: ljh
* @Description: 在controller前攔截請求
* @DateTime: 10:38 2023/8/9
* @Params:
* @Return
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.err.println(request.getMethod());
if (request.getMethod().equals("GET") && request.getRequestURI().contains("?")) {
//獲取EGT請求中的參數(shù),例如http://127.0.0.1:8088/api/checkTechCertInfoCancel?name=ljh 請求中的參數(shù)ljh
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String[] value = entry.getValue();
for (String s : value) {
//校驗參數(shù)值是否合法
if (verifySql(s)) {
response.setContentType("application/json;charset=utf-8");
Result result = new Result();
result.setMessage("請求參數(shù)中含有非法字符!請檢查重新輸入");
result.setStatus(500);
response.getWriter().write(JSON.toJSONString(result));
return false;
}
}
}
} else {
//獲取EGT請求中的參數(shù),例如http://127.0.0.1:8088/api/checkTechCertInfoCancel/ljh 請求中的參數(shù)ljh
Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
for (String key : pathVariables.keySet()) {
//校驗參數(shù)值是否合法
if (verifySql(pathVariables.get(key))) {
//返回錯誤提示
response.setContentType("application/json;charset=utf-8");
Result result = new Result();
result.setMessage("請求參數(shù)中含有非法字符!請檢查重新輸入");
result.setStatus(500);
response.getWriter().write(JSON.toJSONString(result));
return false;
}
}
}
return true;
}
//處理請求完成后視圖渲染之前的處理操作
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
//視圖渲染之后的操作
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
/**
* @Author: ljh
* @Description: 校驗非法字符
* @DateTime: 11:15 2023/8/9
* @Params:
* @Return
*/
public boolean verifySql(String parameter) {
String s = parameter.toLowerCase();
// 過濾掉的sql關(guān)鍵字,特殊字符前面需要加\\進(jìn)行轉(zhuǎn)義
String badStr =
"select|update|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|table|" +
"char|declare|sitename|xp_cmdshell|like|from|grant|use|group_concat|column_name|" +
"information_schema.columns|table_schema|union|where|order|by|" +
"'\\*|\\;|\\-|\\--|\\+|\\,|\\//|\\/|\\%|\\#";
//使用正則表達(dá)式進(jìn)行匹配
boolean matches = s.matches(badStr);
return matches;
}

注冊攔截器

/**
* @Author: ljh
* @ClassName MvcInterceptorConfig
* @Description 注冊SqlInterceptor攔截器到容器中
* @date 2023/8/9 10:21
* @Version 1.0
*/
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SqlInterceptor()) //需要注冊到容器中的攔截器
.addPathPatterns("/**"); //所有請求都被攔截,靜態(tài)資源也被攔截
//                .excludePathPatterns("/", "/login", "/css/**", "/fonts/**", "/images/**", "/js/**"); // 放行的請求
}
}

測試效果

請求內(nèi)容合法:

請求內(nèi)容不合法:

Springboot中使用過濾器校驗PSOT類型請求參數(shù)內(nèi)容

到此這篇關(guān)于Springboot中攔截GET請求獲取請求參數(shù)驗證合法性的文章就介紹到這了,更多相關(guān)Springboot攔截GET請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java MCP 鑒權(quán)設(shè)計與實現(xiàn)指南(完整示例)

    Java MCP 鑒權(quán)設(shè)計與實現(xiàn)指南(完整示例)

    MCP鑒權(quán)為大語言模型集成提供安全機(jī)制,涵蓋服務(wù)端過濾器、注解及客戶端Basic、Header、QueryString等方式,適配不同通信通道與框架,需遵循最佳實踐保障安全性,本文給大家介紹Java MCP 鑒權(quán)設(shè)計與實現(xiàn)指南,感興趣的朋友一起看看吧
    2025-07-07
  • Java jvm中Code Cache案例詳解

    Java jvm中Code Cache案例詳解

    這篇文章主要介紹了Java jvm中Code Cache案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Hibernate傳入Java對象創(chuàng)建動態(tài)表并錄入數(shù)據(jù)

    Hibernate傳入Java對象創(chuàng)建動態(tài)表并錄入數(shù)據(jù)

    這篇文章主要介紹了Hibernate傳入Java對象創(chuàng)建動態(tài)表并錄入數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java設(shè)置請求響應(yīng)時間的多種實現(xiàn)方式

    Java設(shè)置請求響應(yīng)時間的多種實現(xiàn)方式

    在前后端分離的開發(fā)模式中,前端請求后端獲取數(shù)據(jù)時,合理設(shè)置響應(yīng)時間(超時時間)是提升系統(tǒng)性能和用戶體驗的關(guān)鍵,本文將深入探討如何在Java中設(shè)置請求的響應(yīng)時間,需要的朋友可以參考下
    2025-01-01
  • idea切換Git分支時保存未提交的文件方式

    idea切換Git分支時保存未提交的文件方式

    當(dāng)在開發(fā)分支上修改了部分文件,但功能未完成且需要修復(fù)其他分支的bug時,可以使用ShelveChanges或StashChanges暫存未提交的修改,之后在其他分支上進(jìn)行修復(fù),修復(fù)完畢后,再恢復(fù)暫存的修改
    2026-04-04
  • Java中TreeSet、HashSet、Collection重寫比較器的實現(xiàn)

    Java中TreeSet、HashSet、Collection重寫比較器的實現(xiàn)

    比較器是一種可以對集合或數(shù)組中的元素按照自定義的方式進(jìn)行排序的對象,本文主要介紹了Java中TreeSet、HashSet、Collection重寫比較器的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • JPA配置詳解之jpaProperties用法

    JPA配置詳解之jpaProperties用法

    這篇文章主要介紹了JPA配置詳解之jpaProperties用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JVM 的 noverify 啟動參數(shù)問題解析

    JVM 的 noverify 啟動參數(shù)問題解析

    這篇文章主要介紹了JVM 的 noverify 啟動參數(shù)問題解析,從 JDK 13 開始及其后續(xù)版本中,不建議繼續(xù)使用?-Xverify:none?和-noverify?參數(shù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • java實現(xiàn)在性能測試中進(jìn)行業(yè)務(wù)驗證實例

    java實現(xiàn)在性能測試中進(jìn)行業(yè)務(wù)驗證實例

    這篇文章主要為大家介紹了java實現(xiàn)在性能測試中進(jìn)行業(yè)務(wù)驗證實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java高級特性基礎(chǔ)之反射五連問

    Java高級特性基礎(chǔ)之反射五連問

    反射賦予了我們在運(yùn)行時分析類以及執(zhí)行類中方法的能力。通過反射你可以獲取任意一個類的所有屬性和方法,你還可以調(diào)用這些方法和屬性。本文就來和大家詳細(xì)聊聊Java中的反射,感興趣的可以了解一下
    2023-01-01

最新評論

西畴县| 普洱| 凤凰县| 万年县| 杭锦旗| 临西县| 襄汾县| 仙游县| 济阳县| 北辰区| 昭通市| 光山县| 宾川县| 谢通门县| 龙海市| 山阳县| 东平县| 芮城县| 天台县| 周口市| 扶沟县| 房产| 开原市| 兴隆县| 宜州市| 垦利县| 威远县| 泰安市| 宿州市| 凤凰县| 海口市| 木兰县| 忻城县| 平遥县| 绥棱县| 盱眙县| 台江县| 姚安县| 屯昌县| 原平市| 齐河县|