springboot Filter 截取 restful 的请求参数
来源:互联网 发布:瞻博网络最新新闻 编辑:程序博客网 时间:2024/05/16 05:28
初学springboot ,想自己定义一个 filter 截取参数用来验证签名,发现HttpServletRequest 并不能直接获取 json字符串,只能获取链接里的参数。
首先定义一个Filter文件, 然后实现Filter 的接口
package smaug.common.filters;import com.alibaba.fastjson.JSONObject;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.util.Map;/** * Created by naonao on 17/5/14. */@WebFilter(filterName = "smaugFilter2", urlPatterns = "/*")public class SmaugFilter extends BaseFilter implements Filter { Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; //获取nginx http的真实IP String realIp = httpServletRequest.getHeader("X-Real-IP");// Map<String, Object> map = readJsonMap(httpServletRequest);// logger.info("filter => " + servletRequest.getRemoteHost() + " " + JSONObject.toJSONString(map)); String quaryString = httpServletRequest.getQueryString(); logger.info("quaryString => " + quaryString); String restUrl = (httpServletRequest.getRequestURL().toString()); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { }}
然后将filter添加都请求链中
package smaug.common.configs;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import smaug.common.filters.SmaugFilter;/** * Created by naonao on 17/5/14. */@Componentpublic class FilterConfig { @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(smaugFilter()); bean.setOrder(1); bean.addUrlPatterns("/*"); return bean; } @Bean public SmaugFilter smaugFilter() { return new SmaugFilter(); }}
因为article 方法是post 的,所以在postman 里 用post的方法 输入以下链接
http://localhost:3031/smaug/test/article?a=1&b=2
看到的log
2017-05-14 16:22:34.736 INFO 70532 --- [nio-3031-exec-1] smaug.common.filters.SmaugFilter : quaryString => a=1&b=2
哈哈,现在都是restful的 天下,这样的filter显然不能满足当初定下的目标。注释掉的代码有用处了哈哈
就是这行代码
Map<String, Object> map = readJsonMap(httpServletRequest);
SmaugFilter 继承了一个父类的BaseFilter
package smaug.common.filters;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;import java.io.BufferedReader;import java.util.Map;/** * Created by naonao on 17/5/14. */public class BaseFilter { public String readJSONString(HttpServletRequest request) { StringBuffer json = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) { json.append(line); } } catch (Exception e) { System.out.println(e.toString()); } return json.toString(); } public Map<String, Object> readJsonMap(HttpServletRequest request) { String json = readJSONString(request); return JSONObject.parseObject(json, new TypeReference<Map<String, Object>>() { }); }}
此时postman的参数
"name" : "闹闹", "age" : 12, "requestId" : "12esdadfe3ed"}
得到的log日志
{"requestId":"12esdadfe3ed","name":"闹闹","age":12}
此时可以针对不同的请求进行不同的预先操作,比如 权限验证
0 0
- springboot Filter 截取 restful 的请求参数
- SpringBoot设置Filter过滤请求参数
- 关于springboot的RestFul的PUT请求,前台参数接收问题
- Springboot获取请求参数
- filter请求参数过滤器
- SpringBoot 的 Filter
- yii2框架-restful的请求参数token验证(二十三)
- Jersery Restful接口服务接收JSON对象的参数请求
- 使用自定义注解进行restful请求参数的校验
- yii2框架-restful的请求参数token验证
- springBoot PUT请求接收不了参数的解决办法
- springboot获取URL请求参数的几种方法
- 构建Spring Restful API请求参数解析
- 构建Spring Restful API请求参数解析
- 构建Spring Restful API请求参数解析
- Restful API的请求拦截
- URL参数的截取
- Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)
- MapReduce编程练习(三),按要求不同文件名输出结果
- Java8-概述
- 在容器中运行Jenkins部署主机中的docker应用
- java排序算法整理(一)
- java打印出n行的金字塔图案
- springboot Filter 截取 restful 的请求参数
- css垂直居中对齐的实现方式
- 一名3年工作经验的程序员应该具备的技能
- 怎么用xshell连接腾讯云linux(CentOS )服务器
- 利用selection对象在textarea光标处插入指定文本
- Maven详解
- java歌德巴赫猜想
- iOS-UIView-设置背景图片4种方式
- 频繁项集挖掘算法之FPGrowth