spring boot拦截器中获取request post请求中的参数

从拦截器中获取post请求的参数的需求

①写一个类,继承HttpServletRequestWrapper

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
public class RequestWrapper extends HttpServletRequestWrapper {

 private final String body;
 public RequestWrapper(HttpServletRequest request) {
 super(request);
 StringBuilder stringBuilder = new StringBuilder();
 BufferedReader bufferedReader = null;
 InputStream inputStream = null;
 try {
 inputStream = request.getInputStream();
 if (inputStream != null) {
 bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
 char[] charBuffer = new char[128];
 int bytesRead = -1;
 while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
 stringBuilder.append(charBuffer, 0, bytesRead);
 }
 } else {
 stringBuilder.append("");
 }
 } catch (IOException ex) {
 } finally {
 if (inputStream != null) {
 try {
 inputStream.close();
 }
 catch (IOException e) {
 e.printStackTrace();
 }
 }
 if (bufferedReader != null) {
 try {
 bufferedReader.close();
 }
 catch (IOException e) {
 e.printStackTrace();
 }
 }
 }
 body = stringBuilder.toString();
 }

 @Override
 public ServletInputStream getInputStream() throws IOException {
 final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
 ServletInputStream servletInputStream = new ServletInputStream() {
 @Override
 public boolean isFinished() {
 return false;
 }
 @Override
 public boolean isReady() {
 return false;
 }
 @Override
 public void setReadListener(ReadListener readListener) {
 }
 @Override
 public int read() throws IOException {
 return byteArrayInputStream.read();
 }
 };
 return servletInputStream;
 }

 @Override
 public BufferedReader getReader() throws IOException {
 return new BufferedReader(new InputStreamReader(this.getInputStream()));
 }
 public String getBody() {
 return this.body;
 }
}

②拦截器层面

import com.alibaba.fastjson.JSON;
import com.miniprogram.api.douyin.user.req.DyuserReq;
import com.miniprogram.common.auth.VisitLimitCount;
import com.miniprogram.common.cache.RedisCache;
import com.miniprogram.common.config.InterceptorConfigMap;
import com.miniprogram.common.config.InterceptorUrlConfig;
import com.miniprogram.common.douyin.SearchEngineMapConstants;
import com.miniprogram.common.response.Response;
import com.miniprogram.common.session.*;
import com.miniprogram.common.utils.DateUtil;
import com.miniprogram.dao.common.UserLoginEntity.Users;
import com.miniprogram.service.douyin.users.UsersService;
import com.miniprogram.web.douyin.config.RequestWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component("authSecurityInterceptor")
public class AuthSecurityInterceptor extends HandlerInterceptorAdapter {
 private Logger logger = LoggerFactory.getLogger(AuthSecurityInterceptor.class);
 @Autowired
 private RedisCache redisCache;
 @Autowired
 private VisitLimitCount visitLimitCount;
 @Override
 public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
 try {
 RequestWrapper requestWrapper = new RequestWrapper(httpServletRequest);
 String body = requestWrapper.getBody();
 System.out.println(body);
 return true;
 }catch (Exception e){
 logger.error("权限判断出错",e);
 }
 return false;
 }
 @Override
 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
 }
 @Override
 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
 }
}

 ③过滤器Filter,用来把request传递下去

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(urlPatterns = "/*",filterName = "channelFilter")
public class ChannelFilter implements Filter {
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
 
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 ServletRequest requestWrapper = null;
 if(servletRequest instanceof HttpServletRequest) {
 requestWrapper = new RequestWrapper((HttpServletRequest) servletRequest);
 }
 if(requestWrapper == null) {
 filterChain.doFilter(servletRequest, servletResponse);
 } else {
 filterChain.doFilter(requestWrapper, servletResponse);
 }
 }
 
 @Override
 public void destroy() {
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值