SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

这篇具有很好参考价值的文章主要介绍了SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  服务端在定位错误的时候,有时候要还原现场,这就要把当时的所有入参参数都能记录下来,GET还好说,基本NGINX都会记录。但是POST的请求参数基本不会被记录,这就需要我们通过一些小技巧来记录这些参数,放入日志,这里我们通过自定义拦截器来做这个操作。

1.编写自定义拦截器

我们紧接上一章的工程源码来做

package com.example.firstweb.interceptor;

import com.example.firstweb.util.Constants;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;

@Component
public class AccessInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
        String queryPath = request.getContextPath() + request.getServletPath();
        StringBuffer alldata=new StringBuffer();
        alldata.append("http://" + request.getServerName() + ":" + request.getServerPort()+ queryPath);

		//get请求
        if (null != request.getQueryString()) {
            alldata.append("?" + request.getQueryString());
            alldata.append(" ");
        }else{
            alldata.append(" ");
        }


        //POST请求
        Enumeration<String> keys = request.getParameterNames();

        if (null != keys) {
            while (keys.hasMoreElements()) {
                String key = keys.nextElement();
                String value = request.getParameter(key);

                alldata.append(key + "=" + value + "&");
            }
        }

        Constants.LOG_ACCESS_INFO.info(alldata.toString());
        alldata.setLength(0);
        return true;
    }

}

2.配置自定义拦截器

package com.example.firstweb.config;

import com.example.firstweb.interceptor.AccessInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;
import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Resource
    private AccessInterceptor accessInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 自定义拦截器,添加拦截路径和排除拦截路径
        registry.addInterceptor(accessInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/hello"); // 排除某些不需要拦截的请求url(即带有/hello请求不会被拦截)
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        需要配置1:----------- 需要告知系统,这是要被当成静态文件的!
//        第一个方法设置访问路径前缀,第二个方法设置资源路径
        registry.addResourceHandler("/**").addResourceLocations("classpath:");
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
    }

}

然后在从welcome的控制器里面增加一个post方法

package com.example.firstweb.controller;


import com.example.firstweb.exception.CommException;
import com.example.firstweb.model.po.WelcomePo;
import com.example.firstweb.model.vo.WelcomeVo;
import com.example.firstweb.service.WelcomeService;
import com.example.firstweb.util.Constants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;


import org.apache.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@Api(value = "welcome controller", tags = "欢迎界面")
public class Welcome {

    @Autowired
    private WelcomeService welcomeService;

    private static final Logger log = Logger.getLogger(Welcome.class);

    @GetMapping("/welcomeindex")
    @ApiOperation("欢迎首页的方法1")
    public ModelAndView welcomeIndex(){

        ModelAndView view = new ModelAndView("welcomeindex");


        WelcomePo wpo= welcomeService.getWelcomInfo();

        WelcomeVo wvo= new WelcomeVo();

        BeanUtils.copyProperties(wpo, wvo);

        view.addObject("welcomedata", wvo);


        //默认控制台输出日志
        log.info("default log info ");

        //输出访问日志
        Constants.LOG_ACCESS_INFO.info("welcome index accesss");
        //输出用户阅读日志
        Constants.LOG_USER_READ.info("first user access log ");

        return view;
    }
    @PostMapping("/welcomeindex2")
    @ApiOperation("欢迎首页的方法2")
    public void welcomeIndex2(@ApiParam("定制欢迎词") String test){
    }
}

启动整个工程代码,然后用postman分别GET访问http://localhost:8088/welcomeindex?name=sss&sho=kow 用post访问http://localhost:8088/welcomeindex2
然后在日志文件access.log,分别找到两条日志
SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8),springboot,JAVA,springboot,spring,java
SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8),springboot,JAVA,springboot,spring,java
程序的源码可以在这里获得链接: https://pan.baidu.com/s/1v23PyXwB4kvxd79jgLurHw 提取码: mkwc文章来源地址https://www.toymoban.com/news/detail-698792.html

到了这里,关于SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask获取请求对象的get和post参数

    get请求参数是在URL里面的,post请求参数是放在请求头里面的 浏览器访问 http://127.0.0.1:5000/get 自定义参数值,浏览器访问 http://127.0.0.1:5000/get?a=123 postman测试 使用 reques.values 同时获取get和post请求的参数: 这样的好处就是不用在代码里面区分get和post请求是用args和form来获取 验证

    2024年02月11日
    浏览(39)
  • php实战案例记录(15)获取GET和POST请求参数

    在PHP中,可以使用 $_GET 和 $_POST 超全局变量来获取GET和POST请求参数。 获取GET请求参数: 要获取GET请求参数,可以使用 $_GET 超全局变量。它是一个关联数组,其中键是参数的名称,值是参数的值。例如,如果URL是 http://example.com/page.php?name=Johnage=25 ,可以使用以下代码获取参数

    2024年02月07日
    浏览(37)
  • 前端Get Post Put Delect请求 传参数 不传参数给后端

    Get请求不传参、Get请求传不是实体类的参数、Get请求传实体类的参数 Post 请求不传参数、Post请求传不是实体类的参数、Post请求传实体类的参数  总是分不清,其中Delect 请求使用的地方很少就先记录Delete请求吧 前端 前端跳后端 后端 前端 前端跳后端 后端 前端 前端跳后端 后

    2024年02月07日
    浏览(51)
  • thinkphp6 入门(3)--获取GET、POST请求的参数值

    一、 Request 对象 thinkphp提供了 Request 对象,其可以 支持对全局输入变量的检测、获取和安全过滤 支持获取包括 $_GET 、 $_POST 、 $_REQUEST 、 $_SERVER 、 $_SESSION 、 $_COOKIE 、 $_ENV 等系统变量,以及文件上传信息 具体参考:https://www.kancloud.cn/manual/thinkphp6_0/1037519 二、可以通过Reque

    2024年02月11日
    浏览(33)
  • node.js中获取前端传递的get、post请求参数

    req.query:get请求; req.body:post请求; (1) get请求:  (2) post请求:      第一步:下载body-parser模块      第二步:引入body-parser模块      第三步:使用body-parser模块      第四步:使用body-parser模块的参数json方法      第五步:获取参数

    2024年02月13日
    浏览(32)
  • java业务代码发送http请求(Post方式:请求参数为JSON格式;Get方式)

    实际开发中,可能需要发送http请求到第三方服务获取数据,于是就有以下应用: 依赖: 假设我需要在我的业务代码中调用该地址: url:http://xx.xx:xxxx/user/count 请求方法:post 内容类型:application/json 请求参数:id, username 返回参数:code 响应结果 int类型                  

    2024年02月12日
    浏览(44)
  • 使用Flask.Request的方法和属性,获取get和post请求参数(二)

    在Python发送Post、Get等请求时,我们使用到requests库。Flask中有一个request库,有其特有的一些方法和属性,注意跟requests不是同一个。 用于服务端获取客户端请求数据。注意:是未经任何处理的原始数据而不管内容类型,如果数据时json的,则取得是json字符串,排序和请求参数

    2024年02月13日
    浏览(37)
  • 【二、http】go的http基本请求设置(设置查询参数、定制请求头)get和post类似

    结果: 结果: 可以看到其中头部信息已经打印出自己增加的部分内容

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包