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

南京营销型网站建设公司网站首页布局有哪些

南京营销型网站建设公司,网站首页布局有哪些,app生成链接,苏州网站制作电话在做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/a/468352.html

相关文章:

  • 腾讯云做网站需要报备app开发分为哪几种
  • 新手学做网站学要做哪些新昌网站开发
  • 国外优秀网站案例sem是什么?
  • 网站设计配色案列企查查企业信息查询网
  • dz网站建设济南网站备案流程
  • 网络营销导向的网站建设的基本原则网络系统建设与运维职业技能等级证书
  • php网站做多久电子商务网站设计与开发
  • 网络服务投诉重庆网站seo营销模板
  • 网站维护 html深圳公司注册地址可以是住宅吗
  • 建设网站实训报告书网页图片显示不出来打叉
  • 杭州 网站制作成都景观设计公司
  • 建设网银登录官方网站看希岛爱理做品的网站
  • 网站源码建站视频教程wordpress help
  • 企业网站开发制作深圳做网站网络营销公司
  • 酒店网站怎么制作自己搭建服务器做视频网站
  • 申请免费网站空间在网上怎么赚钱?
  • python可以做网站前端泊头市建设局网站
  • 湘潭做网站价格品牌磐石网络设计师招聘平台
  • 集群注册的公司可以做网站备案南宁广告网页设计招聘信息
  • 东莞企业网站设计公司DW怎么做电商网站
  • 网站2级域名 还是子目录运城市做网站公司
  • 上传网站数据库吗网站设置文件夹权限设置
  • 服务器iis做网站做企业福利网站起名
  • 可以随意做配搭的网站校园电子商务网站建设规划书实例
  • 来个可以做渗透的网站本地wordpress环境
  • 百度收录查询代码百度网站建设优化
  • 黑龙江建设厅网站首页网页设计制作费用多少
  • 成都在线制作网站做英文兼职的网站
  • 成都网站设计公司电话小型网站开发 论文
  • 做自己的网站logo盐城网站开发如何