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

网站建设怎么做?网站备案级别

网站建设怎么做?,网站备案级别,如果想看网站的收费电影应该怎么做,重庆提供行业网站建站报价由于项目需要使用拦截器对请求参数进行操作,可是请求流只能操作一次,导致后面方法不能再获取流了。 新建SpringBoot项目 1. 新建拦截器WebConfig.java /*** date: 2023/2/6 11:21* author: zhouzhaodong* description:*/ Configuration public class W…

由于项目需要使用拦截器对请求参数进行操作,可是请求流只能操作一次,导致后面方法不能再获取流了。

新建SpringBoot项目

1. 新建拦截器WebConfig.java

/*** @date: 2023/2/6 11:21* @author: zhouzhaodong* @description:*/
@Configuration
public class WebConfig implements WebMvcConfigurer {/*** 添加Web项目的拦截器*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 对所有访问路径,都通过MyInterceptor类型的拦截器进行拦截// 放行登录页,登陆操作,静态资源registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/", "/login", "/index.html", "/user/login", "/css/**", "/images/**", "/js/**", "/fonts/**");}
}

2. 获取请求参数并处理逻辑

/*** @date: 2023/2/6 12:46* @author: zhouzhaodong* @description: 获取请求参数并处理*/
public class RequestWrapper extends HttpServletRequestWrapper {private final Logger logger = LoggerFactory.getLogger(RequestWrapper.class);private final byte[] body;public RequestWrapper(HttpServletRequest request) {super(request);String sessionStream = getBodyString(request);body = sessionStream.getBytes(StandardCharsets.UTF_8);}public String getBodyString() {return new String(body, StandardCharsets.UTF_8);}/*** @date: 2023/2/6 12:46* @author: zhouzhaodong* @description: 获取请求Body*/public String getBodyString(final ServletRequest request) {StringBuilder sb = new StringBuilder();InputStream inputStream = null;BufferedReader reader = null;try {inputStream = cloneInputStream(request.getInputStream());reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));String line = "";while ((line = reader.readLine()) != null) {sb.append(line);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}logger.info("获取body请求参数:" + sb);return sb.toString();}/*** @date: 2023/2/6 12:46* @author: zhouzhaodong* @description: 复制输入流*/public InputStream cloneInputStream(ServletInputStream inputStream) {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;try {while ((len = inputStream.read(buffer)) > -1) {byteArrayOutputStream.write(buffer, 0, len);}byteArrayOutputStream.flush();} catch (IOException e) {e.printStackTrace();}return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());}@Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(getInputStream()));}@Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream bais = new ByteArrayInputStream(body);return new ServletInputStream() {@Overridepublic int read() {return bais.read();}@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}};}
}

3. 实现HandlerInterceptor接口

/*** @date: 2023/2/6 11:19* @author: zhouzhaodong* @description: 实现HandlerInterceptor接口*/public class MyInterceptor implements HandlerInterceptor {private final Logger logger = LoggerFactory.getLogger(MyInterceptor.class);/*** @date: 2023/2/6 11:19* @author: zhouzhaodong* @description: 访问控制器方法前执行*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {logger.info("================进入拦截器======================");logger.info(new Date() + "--preHandle:" + request.getRequestURL());logger.info("***************************【RequestBeginning】***************************");logger.info("----------------StartProcessingRequest----------------");try {long currentTime = System.currentTimeMillis();SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");Date date = new Date(currentTime);logger.info("CurrentTime: {}", formatter.format(date));logger.info("ResponseTime: {}", (System.currentTimeMillis() - currentTime) + "ms");String requestUrl = request.getRequestURI();logger.info("RequestURL: {} ", requestUrl);logger.info("GetMethod: {}", handler);String method = request.getMethod();logger.info("Method: {}", method);//获取请求参数RequestWrapper requestWrapper = new RequestWrapper(request);//这里getBodyString()方法无参数logger.info("RequestBody: {}", requestWrapper.getBodyString());} catch (Exception e) {logger.error("MVC业务处理-拦截器异常:", e);}logger.info("-------------------------End-------------------------");return true;}/*** @date: 2023/2/6 12:46* @author: zhouzhaodong* @description: 访问控制器方法后执行*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {logger.info(new Date() + "--postHandle:" + request.getRequestURL());}/*** @date: 2023/2/6 12:46* @author: zhouzhaodong* @description: postHandle方法执行完成后执行,一般用于释放资源*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {logger.info(new Date() + "--afterCompletion:" + request.getRequestURL());}
}

4. application.yml

spring:main:# 当出现相同名字的类进行注册时,准许覆盖注册allow-bean-definition-overriding: true

5. 启动类添加@ServletComponentScan注解

6. 新建TestController.java

/*** @date: 2023/2/6 12:24* @author: zhouzhaodong* @description: 测试*/
@RestController
public class TestController {@PostMapping("/one/abc")public String abc(@RequestBody User user){return user.getName();}
}

7. 不进行处理先测试看结果

请求结果:
在这里插入图片描述

控制台输出:
在这里插入图片描述

可以看出,流被读取了一次然后后台就获取不到了。

8. 通过过滤器获取参数然后传到后面程序中

/*** @date: 2023/2/6 12:47* @author: zhouzhaodong* @description:*/
@Component
@WebFilter(urlPatterns = "/*", filterName = "channelFilter")
public class ChannelFilter implements Filter {private final Logger logger = LoggerFactory.getLogger(ChannelFilter.class);@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {logger.info("================进入过滤器======================");// 防止流读取一次后就没有了, 所以需要将流继续写出去HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;RequestWrapper requestWrapper = new RequestWrapper(httpServletRequest);filterChain.doFilter(requestWrapper, servletResponse);}@Overridepublic void destroy() {}
}

9. 流处理后再进行测试

请求结果:
在这里插入图片描述
控制台输出:
在这里插入图片描述

解决啦!!!

源代码路径

https://github.com/zhouzhaodong/springboot/tree/master/springboot-interceptor

http://www.yayakq.cn/news/173116/

相关文章:

  • 沈阳定制网站空间 建网站
  • 游戏界面设计图片关键词seo优化服务
  • 公司网站建设定金计入什么科目网站建设服务专业建站公司
  • 福建做网站电商培训心得体会
  • 网站做目录中时代汇创网站建设
  • 揭阳专业做网站在线代理访问网站的网址
  • 网站开发类的合同范本深圳网站建设公司哪好
  • 交互式网站是什么意思深圳的公司排名
  • 大连零基础网站建设教学电话摄影网站导航
  • 禄丰县住房和城乡建设局网站杭州学编程哪里的培训机构好
  • 专业提供建站模板的公司深圳市建设工程造价管理站官网
  • 在线crm软件朝阳seo搜索引擎
  • 如何管理网站内容网站总体建设方面的优势与不足
  • 免费搭建网站模板网站做的漂亮的企业
  • 广州互邦物流网络优化建站西电信息化建设网站
  • 微信群推广网站建设长春汽开区建设局网站
  • asp.net网站开发文档公司注销流程及需要的材料
  • 巴彦淖尔市网站建设wordpress获取分类下所有文章
  • 门户网站开发合同如何删除hao123主页
  • 网站二维码弹窗wordpress自定义首页
  • 网站开发技术现状高密网站建设价格
  • 怎样做个网站南充网站建设天赐
  • 湘潭网站建设选择磐石网络推广普通话奋进新征程宣传标语
  • 怎么自己做个网站赶集网官网首页
  • 建筑模拟器2022下载厦门关键词seo
  • 数字校园建设专题网站上海助君网络科技有限公司
  • 做电影网站怎么盈利经典网站首页设计
  • 河北中保建设集团网站部门门户网站建设的目的
  • 公司网站公众号维护怎么做哪家专门做特卖的网站
  • 厦门中国建设银行招聘信息网站品牌设计公司成都