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

企业营销网站建设策划书端口扫描站长工具

企业营销网站建设策划书,端口扫描站长工具,市建设政府网站的先进经验,wordpress nofollow标签在做web项目开发时,我们有时候需要做一些前置的拦截判断处理,比如非法参数校验,防攻击拦截,统一日志处理等,而请求参数如果是form表单提交还好处理;对于json这种输入流的数据就会有问题,统一处理…

在做web项目开发时,我们有时候需要做一些前置的拦截判断处理,比如非法参数校验,防攻击拦截,统一日志处理等,而请求参数如果是form表单提交还好处理;对于json这种输入流的数据就会有问题,统一处理如果读取了数据流就会将流进行关闭,这就会导致接下来的业务处理无法读取数据流。为了解决这个问题,需要将request中的输入流包装为可以重复读取的数据流,具体的操作如下:
自定义一个类继承HttpServletRequestWrapper,并实现它里面的相关方法:

import cn.hutool.core.io.IoUtil;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;/*** @Author xingo* @Date 2024/1/26*/
public class RepeatableReadRequestWrapper extends HttpServletRequestWrapper {private final byte[] body;public RepeatableReadRequestWrapper(HttpServletRequest request) throws IOException {super(request);request.setCharacterEncoding("UTF-8");body = IoUtil.readBytes(request.getInputStream());}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(getInputStream()));}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream bis = new ByteArrayInputStream(body);return new ServletInputStream() {@Overridepublic int read() throws IOException {return bis.read();}@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}};}}

封装成这个类就是为了解决需要重复读取输入流的地方就使用这个包装类替换原有的request对象。再定义一个过滤器用于模拟统一处理请求参数,下面就简单模拟在参数中取用户名的过滤器:

import com.fasterxml.jackson.databind.JsonNode;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.util.Objects;/*** @Author xingo* @Date 2024/1/26*/
@Order(value = Ordered.LOWEST_PRECEDENCE - 1)
@Component
@WebFilter(filterName = "paramsFilter", urlPatterns = "/*")
public class CheckParamsFilter implements Filter {private ServletContext context;static final String checkKey = "userName";@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);context = filterConfig.getServletContext();}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;ServletRequest requestWrapper = null;String userName = null;String contentType = request.getContentType();if(contentType != null && contentType.contains(MediaType.APPLICATION_JSON_VALUE)) {try {// 对于需要读取输入流的先对request进行包装处理,这样后续再次需要读取数据流时就可以正常读到requestWrapper = new RepeatableReadRequestWrapper(request);JsonNode jsonNode = JacksonUtils.getObjectMapper().readTree(requestWrapper.getInputStream());if(jsonNode.get(checkKey) != null) {userName = jsonNode.get(checkKey).asText();}} catch (Exception e) {e.printStackTrace();}} else {try {if(request.getParameter(checkKey) != null) {userName = request.getParameter(checkKey);}} catch (Exception e) {e.printStackTrace();}}if(userName != null) {// 这里判断用户名检查成功就放行、否则就返回失败信息,在放行处理时需要判断是否需要传递包装requestif(this.check(userName)) {chain.doFilter(Objects.requireNonNullElse(requestWrapper, servletRequest), servletResponse);}servletResponse.setContentType("application/json; charset=utf-8");servletResponse.getWriter().print(JacksonUtils.toJSONString(ApiResult.fail(400, "信息验证失败")));return;}chain.doFilter(Objects.requireNonNullElse(requestWrapper, servletRequest), servletResponse);}@Overridepublic void destroy() {Filter.super.destroy();}private boolean check(String userName) {return "admin".equals(userName);}
}
http://www.dtcms.com/wzjs/36842.html

相关文章:

  • 定制化网站开发公司优化设计全部答案
  • 广州做网站seo谷歌搜索引擎营销
  • b2c网站可分为国际军事新闻
  • 成都医院做网站建设百度首页排名优化多少钱
  • 网站怎么做图片放映效果百度seo网站优化 网络服务
  • 做关于什么的网站5151app是交友软件么
  • 注册网站后邮箱收到邮件百度关键词点击价格查询
  • 深圳网站建房裤子seo关键词
  • 网页制作工作要求国内seo排名分析主要针对百度
  • 做摄影网站的目的是什么深圳seo排名
  • 源码做网站图文教程灰色词快速上排名
  • 网站建设需要哪些语言优化教程网
  • b2b行业网站建设搜索广告优化
  • 无形资产 网站建设餐饮店如何引流与推广
  • 国外做电商网站有哪些新冠疫情最新消息
  • 邢台地区网站建设独立线上推广策略
  • 做外贸网站咨询网站策划是干什么的
  • 个股期权系统网站开发营销策划方案
  • 深圳建设局网站宝安分中心深圳网站设计公司排行
  • 做任务挣钱的网站聚哈尔滨seo关键词优化
  • 电商网站建设技术可行性分析sem是什么岗位
  • 郑州建网站哪家好seo自动推广工具
  • 个人网站备案通过后什么软件比百度搜索好
  • 网站建设多少钱媒体平台
  • 如何用虚拟主机建设网站广告投放方式
  • 北京酒店团购网站建设seo是什么化学名称
  • 毕业设计网站模板下载专业海外网站推广
  • 网站建设一般报价多少论文收录网站有哪些
  • 德州乐陵德州seo公司关键词优化骗局
  • 网站建设工作策划方案如何在百度发布信息推广