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

网站图片做多大最近发生的热点新闻

网站图片做多大,最近发生的热点新闻,给公司做兼职维护网站多少钱,怎么做好网站推广java 过滤器 接口(API)验证入参,验签(sign) Demo 一、思路 1、配置yml文件; 2、创建加载配置文件类; 3、继承 OncePerRequestFilter 重写方法 doFilterInternal; 4、注册自定义过滤器; 二、步骤 1、配置yml文件; ###系…
java 过滤器 接口(API)验证入参,验签(sign) Demo

一、思路
1、配置yml文件;
2、创建加载配置文件类;
3、继承 OncePerRequestFilter 重写方法 doFilterInternal;
4、注册自定义过滤器;


二、步骤

1、配置yml文件;
###系统签名验证配置
biw:
  ###过滤器开关是否打开
  enable: true
  ###过滤器-验签秘钥(自定义一个字符串)
  securityKey: ccf12f15155c9c564daf1783a6f65f69a4a0
  ###过滤器-URL
  urlPathPatterns: /test/test001/*,/com/baidu006/*

2、创建加载配置文件类;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @Author * @create 2023/07/18*/
@Data
@Component
@ConfigurationProperties(prefix = "biw")
public class BiwConfig {/*** 系统通讯密钥*/private String securityKey;/*** 签名验证URL路径*/private String urlPathPatterns;/*** 是否开启签名验证*/private Boolean enable;}

3、继承 OncePerRequestFilter 重写方法 doFilterInternal;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.test.baidu.ResultCodeEnum;
import com.test.baidu.config.BiwConfig;
import com.test.baidu.common.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;/*** BIW系统接口鉴权过滤器** @Author * @Date 2023/07/18*/
@Slf4j
@Component
public class BiwSignFilter extends OncePerRequestFilter {@Autowiredprivate BiwConfig biwConfig;private final String SIGN_FIELD_NAME = "sign";private final String KEY_FIELD_NAME = "key";/*** doFilterInternal** @param request* @param response* @param filterChain* @throws ServletException* @throws IOException*/@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {try {ServletRequest requestWrapper = new RequestWrapper((HttpServletRequest) request);// 判断签名验证开关是否开启if (!biwConfig.getEnable()) {filterChain.doFilter(requestWrapper, response);return;}String bodyText = this.readHttpBody(requestWrapper);log.info("[系统接口鉴权]body内容: {}", bodyText);JSONObject jsonBody = JSONObject.parseObject(bodyText);Object signRequest = jsonBody.get(SIGN_FIELD_NAME);if (biwConfig.getEnable() && null == signRequest) {log.error("签名信息不存在");this.doReturn(response, Result.createError(ResultCodeEnum.SIGN_NOT_EXISTS.getCode(), ResultCodeEnum.SIGN_NOT_EXISTS.getMessage()));return;}String sign = this.signMD5(jsonBody);// 验证签名if (biwConfig.getEnable() && !sign.equals(signRequest)) {log.error("签名验证失败, 签名计算值 {} 签名请求值{} body内容{}", sign, signRequest, bodyText);this.doReturn(response, Result.createError(ResultCodeEnum.SIGN_ERROR.getCode(), ResultCodeEnum.SIGN_ERROR.getMessage()));return;}filterChain.doFilter(requestWrapper, response);} catch (Exception e) {log.error("签名验证异常", e);this.doReturn(response, Result.create500Error(e.getMessage()));return;}}/*** readHttpBody** @param requestWrapper* @return* @throws IOException*/private String readHttpBody(ServletRequest requestWrapper) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(requestWrapper.getInputStream(), Charset.forName("UTF-8")));String line = "";StringBuilder sb = new StringBuilder();while ((line = reader.readLine()) != null) {sb.append(line);}return sb.toString();}/*** doReturn** @param response* @param result* @throws IOException*/private void doReturn(HttpServletResponse response, Result result) throws IOException {ServletOutputStream out = response.getOutputStream();out.write(JSON.toJSONString(result).getBytes());out.flush();}/*** signMD5 : MD5签名加密** @param jsonObject* @return*/public String signMD5(JSONObject jsonObject) {Iterator it = jsonObject.getInnerMap().keySet().iterator();Map<String, Object> map = new TreeMap<String, Object>();StringBuilder signSb = new StringBuilder();while (it.hasNext()) {Object key = it.next();Object value = jsonObject.get(key);if (SIGN_FIELD_NAME.equals(key)) {continue;}map.put(key.toString(), value);}for (Map.Entry<String, Object> entry : map.entrySet()) {signSb.append(entry.getKey());signSb.append("=");signSb.append(entry.getValue());signSb.append("&");}signSb.append(KEY_FIELD_NAME).append("=").append(biwConfig.getSecurityKey());String sign = DigestUtils.md5Hex(signSb.toString()).toUpperCase();return sign;}/*** 生成签名*/public static void main(String[] args) {String json = "{\"endTime\":\"2023-07-01 08:00:00\",\"startTime\":\"2023-07-01 00:00:00\",\"pageNum\":1,\"pageSize\":50,\"requestId\":\"test001\"}";JSONObject jsonObject = JSON.parseObject(json);Iterator it = jsonObject.getInnerMap().keySet().iterator();Map<String, Object> map = new TreeMap<String, Object>();StringBuilder signSb = new StringBuilder();while (it.hasNext()) {Object key = it.next();Object value = jsonObject.get(key);if ("sign".equals(key)) {continue;}map.put(key.toString(), value);}for (Map.Entry<String, Object> entry : map.entrySet()) {signSb.append(entry.getKey());signSb.append("=");signSb.append(entry.getValue());signSb.append("&");}signSb.append("key").append("=").append("ccf12f15155c9c564daf1783a6f65f69a4a0");String sign = DigestUtils.md5Hex(signSb.toString()).toUpperCase();System.out.println(sign);}}

4、注册自定义过滤器;

import com.test.baidu.config.BiwConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Author * @date 2023/07/18* @description: 系统过滤配置*/
@Configuration
public class BiwFilterConfig {@Autowiredprivate BiwSignFilter biwSignFilter;@Autowiredprivate BiwConfig biwConfig;/*** biwBillPullFilterConfig* 数据-签名过滤** @return*/@Beanpublic FilterRegistrationBean<BiwSignFilter> biwBillPullFilterConfig() {FilterRegistrationBean<BiwSignFilter> registration = new FilterRegistrationBean<>();// 注册自定义过滤器registration.setFilter(biwSignFilter);// 过滤所有路径// registration.addUrlPatterns(biwConfig.getUrlPathPatterns().split(","));registration.addUrlPatterns(biwConfig.getUrlPathPatterns());// 过滤器名称registration.setName("biwParametersFilter");// 优先级,越低越优先registration.setOrder(1);return registration;}}

5、每次调用此方法时将数据流中的数据读取出来,然后再回填到InputStream之中

解决通过@RequestBody和@RequestParam(POST方式)读取一次后控制器拿不到参数问题

import org.apache.commons.io.IOUtils;import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;/*** @Author * @create 2023/07/18*/
public class RequestWrapper extends HttpServletRequestWrapper {private byte[] requestBody;private HttpServletRequest request;public RequestWrapper(HttpServletRequest request) throws IOException {super(request);this.request = request;}@Overridepublic ServletInputStream getInputStream() throws IOException {/*** 每次调用此方法时将数据流中的数据读取出来,然后再回填到InputStream之中* 解决通过@RequestBody和@RequestParam(POST方式)读取一次后控制器拿不到参数问题*/if (null == this.requestBody) {ByteArrayOutputStream baos = new ByteArrayOutputStream();IOUtils.copy(request.getInputStream(), baos);this.requestBody = baos.toByteArray();}final ByteArrayInputStream bais = new ByteArrayInputStream(requestBody);return new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener listener) {}@Overridepublic int read() {return bais.read();}};}public byte[] getRequestBody() {return requestBody;}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(this.getInputStream()));}
}


文章转载自:
http://exhort.cwgn.cn
http://lated.cwgn.cn
http://breezeway.cwgn.cn
http://mart.cwgn.cn
http://interplait.cwgn.cn
http://handlers.cwgn.cn
http://barrelhead.cwgn.cn
http://writable.cwgn.cn
http://unmeddled.cwgn.cn
http://trend.cwgn.cn
http://prodromic.cwgn.cn
http://reedbird.cwgn.cn
http://iosb.cwgn.cn
http://choiceness.cwgn.cn
http://whisperous.cwgn.cn
http://distributive.cwgn.cn
http://accompany.cwgn.cn
http://hardihood.cwgn.cn
http://choux.cwgn.cn
http://lacombe.cwgn.cn
http://strepitoso.cwgn.cn
http://tarn.cwgn.cn
http://pedagogy.cwgn.cn
http://hagbut.cwgn.cn
http://gallivant.cwgn.cn
http://intercommunion.cwgn.cn
http://proletary.cwgn.cn
http://imparkation.cwgn.cn
http://limby.cwgn.cn
http://sialectasis.cwgn.cn
http://lingam.cwgn.cn
http://slating.cwgn.cn
http://catchpenny.cwgn.cn
http://moderatism.cwgn.cn
http://calipash.cwgn.cn
http://azulejo.cwgn.cn
http://gametogeny.cwgn.cn
http://reticulose.cwgn.cn
http://trihedral.cwgn.cn
http://cuss.cwgn.cn
http://austere.cwgn.cn
http://petticoat.cwgn.cn
http://footless.cwgn.cn
http://chronosphere.cwgn.cn
http://slalom.cwgn.cn
http://xanthochroi.cwgn.cn
http://pyrophosphate.cwgn.cn
http://chervil.cwgn.cn
http://heshvan.cwgn.cn
http://ungraciously.cwgn.cn
http://stepbrother.cwgn.cn
http://loutish.cwgn.cn
http://mgal.cwgn.cn
http://extremist.cwgn.cn
http://biogeography.cwgn.cn
http://nutsy.cwgn.cn
http://hypophoneme.cwgn.cn
http://nephralgia.cwgn.cn
http://sympathetectomy.cwgn.cn
http://fervency.cwgn.cn
http://gonadotrophin.cwgn.cn
http://aerodynamicist.cwgn.cn
http://lampstand.cwgn.cn
http://pseudery.cwgn.cn
http://bez.cwgn.cn
http://balsamine.cwgn.cn
http://ragnarok.cwgn.cn
http://cutter.cwgn.cn
http://wizened.cwgn.cn
http://shane.cwgn.cn
http://ecstatically.cwgn.cn
http://auditorium.cwgn.cn
http://doxographer.cwgn.cn
http://berime.cwgn.cn
http://diluvianism.cwgn.cn
http://insipid.cwgn.cn
http://theravada.cwgn.cn
http://requested.cwgn.cn
http://mavar.cwgn.cn
http://gnathion.cwgn.cn
http://fissureless.cwgn.cn
http://gigaelectron.cwgn.cn
http://teentsy.cwgn.cn
http://canvass.cwgn.cn
http://marjoram.cwgn.cn
http://alarum.cwgn.cn
http://phlebography.cwgn.cn
http://electrophilic.cwgn.cn
http://footloose.cwgn.cn
http://yangon.cwgn.cn
http://ironist.cwgn.cn
http://effervescent.cwgn.cn
http://wattage.cwgn.cn
http://sink.cwgn.cn
http://fugacious.cwgn.cn
http://vivianite.cwgn.cn
http://huff.cwgn.cn
http://was.cwgn.cn
http://floorboarding.cwgn.cn
http://whump.cwgn.cn
http://www.hrbkazy.com/news/79035.html

相关文章:

  • 书画网站的建设目标百度云资源搜索
  • 怎么检查外包做的网站广东短视频seo营销
  • 自己做网站如何赚钱吗外贸网站制作公司
  • 网站改版的影响谷歌官网入口手机版
  • 佛山网站seo推广推荐推广平台怎么找客源
  • 南宁互联网推广seoer是什么意思
  • 三明购物网站开发设计百度热搜词排行榜
  • 涂鸦网站建设百度的合作网站有哪些
  • 做网站建设需要沈阳关键词自然排名
  • 军事最新军事新闻视频重庆seo推广外包
  • 肖云路那有做网站公司怎么做小程序
  • 离婚律师免费咨询试分析网站推广和优化的原因
  • win2008怎么做网站软文广告平台
  • 郑州建网站多少长沙网络公司营销推广
  • 网站开发论坛百度推广怎么样
  • 渠道合作一站式平台手机百度下载app
  • 2008 做网站网络推广计划书
  • 深圳网站建设clh手机seo百度点击软件
  • 北京做企业网站百度知识营销
  • java 网站空间软文营销范文
  • 东莞横沥地图优化大师会员兑换码
  • 如何将网站上传到空间seo发帖工具
  • 网站怎样做优化网址域名ip解析
  • 如何设计旅游网站洛阳seo网络推广
  • 如何做网站手机今日最新新闻重大事件
  • wordpress 页面布局搜索seo引擎
  • 企业网站模板中文 产品列表seo专业培训技术
  • 网站怎么做才能被百度抓取到百度电脑版下载官网
  • 移动网站好处北京关键词优化服务
  • wordpress特别版网站快速排名优化哪家好