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

国外做储物的网站中国网站的特点

国外做储物的网站,中国网站的特点,无锡网站推广电话,住院证明图片在线制作JAVA#xff1a;Filer过滤器 介绍 Java中的Filter也被称为过滤器#xff0c;它是Servlet技术的一部分#xff0c;用于在web服务器上拦截请求和响应#xff0c;以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求#xff0c;也可以利用Filter对访问请求…JAVAFiler过滤器 介绍 Java中的Filter也被称为过滤器它是Servlet技术的一部分用于在web服务器上拦截请求和响应以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求也可以利用Filter对访问请求的数据IP做限制。 文档为本人学习java过滤器过程中做的学习记录。 主要用途 认证过滤检查用户请求并确定是否合法。登记日志记录请求和响应的日志。改变请求和响应可以修改请求头和响应头。数据压缩在发送大数据前可以压缩数据。加密对请求和响应进行加密和解密。 使用说明 Spring项目中创建类继承Filter实现init、doFilter、destroy方法 init只在项目启动的时候运行用来做数据的初始化doFilter数据过滤每次http请求都会过滤filterChain.doFilter(request, servletResponse)前面的程序程序是在执行目标程序前执行后面的程序是在目标程序后执行若doFilter程序没有执行filterChain.doFilter请求将会被拦截。destroy项目结束时运行 多个过滤器执行顺序 注意SpringBoot项目中多个过滤器时Order WebFilter ServletComponentScan 是无法实现按顺序执行过滤器的推荐使用FilterRegistrationBean实现过滤。 原因详细分析见https://blog.csdn.net/Zong_0915/article/details/126747302 案例使用FilterRegistrationBean限制过滤器执行循序限制IP修改请求返回值 案例有两个过滤器MyFilter01和MyFilter02要求按先执行过滤器MyFilter01再执行过滤器MyFilter02顺序。 MyFilter01实现对IP的白名单限制限制127.0.0.1仅可以访问一次以及请求返回值的更写。 MyFilter02仅用于体现执行顺序。 案例参考地址 https://blog.csdn.net/zhanwuguo8346/article/details/120498756 创建过滤器MyFilter01用于限制访问IP修改请求返回值 Slf4j public class MyFilter01 implements Filter {private MapString, Integer whiteIPMap;private ListString alwaysIPList;public MyFilter01(MapString, Integer whiteIPMap, ListString alwaysIPList) {this.alwaysIPList alwaysIPList;this.whiteIPMap whiteIPMap;}private final ObjectMapper objectMapper new ObjectMapper();private static final SetString ALLOWED_PATHS Collections.unmodifiableSet(new HashSet(Arrays.asList(/swagger-resources, /v3/swagger-login, /v2/api-docs)));private static MapString, Integer whiteIpMapDay new HashMap();Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(MyFilter01项目开始时候执行-------init);System.out.println(MyFilter01whiteIPMap whiteIPMap);System.out.println(MyFilter01alwaysIPList alwaysIPList);whiteIpMapDay.putAll(whiteIPMap);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(MyFilter01项目每次http请求时候执行-------doFilter.start);HttpServletRequest request (HttpServletRequest) servletRequest;String ipAddr getIpAddr(request);log.info(PermissionFilter 过滤器请求ip为{}, ipAddr);String path request.getRequestURI().substring(request.getContextPath().length()).replaceAll([/]$, );boolean contains ALLOWED_PATHS.contains(path);servletResponse.setCharacterEncoding(utf-8);servletResponse.setContentType(text/html;charsetutf-8);if (alwaysIPList.contains(ipAddr) contains) {filterChain.doFilter(request, servletResponse);} else {if (whiteIpMapDay.containsKey(ipAddr)) {Integer integer whiteIpMapDay.get(ipAddr);if (integer 0) {if (contains) {filterChain.doFilter(request, servletResponse);} else {whiteIpMapDay.put(ipAddr, (whiteIpMapDay.get(ipAddr) - 1));filterChain.doFilter(request, servletResponse);}} else {BaseResponseVoid baseResponse new BaseResponse();baseResponse.setCode(-1);baseResponse.setMessage(请求被拒绝本IP: ipAddr 每天只允许调用 whiteIPMap.get(ipAddr) 次);String response objectMapper.writeValueAsString(baseResponse);setServletResponseMessage(servletResponse, response);}} else {BaseResponseVoid baseResponse new BaseResponse();baseResponse.setMessage(不支持本IP请求 ipAddr);baseResponse.setCode(-1);String response objectMapper.writeValueAsString(baseResponse);setServletResponseMessage(servletResponse, response);}}System.out.println(MyFilter01项目每次http请求时候执行-------doFilter.end);}Overridepublic void destroy() {System.out.println(MyFilter01项目结束时候执行-------destroy);}/*** 处理返回是getWriter()还是getOutputStream();* getWriter()out对象用于处理字符流数据。* getOutputStream()os用于输出字符流数据或者二进制的字节流数据都可以。*/private void setServletResponseMessage(ServletResponse servletResponse, String response) {try {servletResponse.getWriter().write(response);} catch (IOException e) {throw new RuntimeException(e);} catch (IllegalStateException e) {servletResponse.setContentType(text/plain;charsetUTF-8); // 设置内容类型和编码try {ServletOutputStream outputStream servletResponse.getOutputStream();outputStream.write(response.getBytes(StandardCharsets.UTF_8)); // 写入字节数组} catch (IOException ex) {throw new RuntimeException(ex);}}}public static String getIpAddr(HttpServletRequest request) {String ipAddress request.getHeader(x-forwarded-for);if (ipAddress null || ipAddress.isEmpty() || unknown.equalsIgnoreCase(ipAddress)) {ipAddress request.getHeader(Proxy-Client-IP);}if (ipAddress null || ipAddress.isEmpty() || unknown.equalsIgnoreCase(ipAddress)) {ipAddress request.getHeader(WL-Proxy-Client-IP);}if (ipAddress null || ipAddress.isEmpty() || unknown.equalsIgnoreCase(ipAddress)) {ipAddress request.getRemoteAddr();if (ipAddress.equals(127.0.0.1) || ipAddress.equals(0:0:0:0:0:0:0:1)) {//根据网卡取本机配置的IPInetAddress inet null;try {inet InetAddress.getLocalHost();} catch (UnknownHostException e) {e.printStackTrace();} // ipAddress inet.getHostAddress();ipAddress 127.0.0.1;}}//对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照,分割if (ipAddress.length() 15) { //***.***.***.***.length() 15if (ipAddress.indexOf(,) 0) {ipAddress ipAddress.substring(0, ipAddress.indexOf(,));}}return ipAddress;}} 过滤器MyFilter02仅作日志记录。体现执行顺序 public class MyFilter02 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(MyFilter02项目开始时候执行-------init);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(MyFilter02项目每次http请求时候执行-------doFilter.start);filterChain.doFilter(servletRequest, servletResponse);System.out.println(MyFilter02项目每次http请求时候执行-------doFilter.end);}Overridepublic void destroy() {System.out.println(MyFilter02项目结束时候执行-------destroy);}}application.yml中设置白名单访问次数一直有权限访问的白名单。 127.0.0.1限制仅可以访问一次。 permission:white-ip: {127.0.0.1: 1, 192.168.16.30: 2}always-ip: 127.0.0.1,127.0.0.1 创建配置类FilterConfig使用Value读取配置文件值注册FilterRegistrationBean到Spring容器中并设置两个过滤器的执行顺序和过滤路径 Configuration public class FilterConfig { Value(#{${permission.white-ip}})private MapString, Integer whiteIPMap;Value(#{${permission.always-ip}.split(,)})private ListString alwaysIPList;Beanpublic FilterRegistrationBeanMyFilter01 myFilterRegistrationBean01() {FilterRegistrationBeanMyFilter01 bean new FilterRegistrationBean();bean.setFilter(new MyFilter01(whiteIPMap, alwaysIPList));bean.addUrlPatterns(/api/*);bean.setOrder(1);return bean;}Beanpublic FilterRegistrationBeanMyFilter02 myFilterRegistrationBean02() {FilterRegistrationBeanMyFilter02 bean new FilterRegistrationBean();bean.setFilter(new MyFilter02());bean.addUrlPatterns(/*);bean.setOrder(2);return bean;} } 程序中用到的BaseResponse类 Data public class BaseResponseT implements Serializable {private int code;private T data;private String message;private String description;public BaseResponse() {}public BaseResponse(int code, T data, String message, String description) {this.code code;this.data data;this.message message;this.description description;}public BaseResponse(int code, T data, String message) {this(code, data, message, );}public BaseResponse(int code, T data) {this(code, data, , );}public BaseResponse(ErrorCodeEnum errorCode) {this(errorCode.getCode(), null, errorCode.getMessage(), errorCode.getDescription());} } 测试结果 第一次执行接口ApiPost127.0.0.1接口返回数据正常创建 第二次执行接口ApiPost127.0.0.1接口返回提示IP只能每天访问一次(这里没有提供更新MyFilter01.whiteIpMapDay来实现每天可反问一次可以使用Schedule每天定时对静态变态做充值)。 执行日志可以看出过滤器按照顺序执行 参考网址 https://blog.csdn.net/zhanwuguo8346/article/details/120498756 https://blog.csdn.net/Zong_0915/article/details/126747302
http://www.dnsts.com.cn/news/209003.html

相关文章:

  • 网站空间可以转移吗建设一个网站所需要注意的
  • 主题网站开发介绍桂林两江四湖怎么玩
  • 温岭高端网站设计哪家好网站开发实用案例教程
  • 景点购票网站开发百度手游app下载
  • 龙华app网站开发网站建设成交话术
  • 怎么在一个网站做多个页面discuz怎么做h5网站
  • 网站 文章 keywords 和主页keywords简单的个人网站模板
  • 站长工具seo仿知乎 wordpress
  • 网站开发工程师职业wordpress demo 安装
  • 常德做网站建设的公司wordpress首页压缩插件
  • 网站内容更改教程合肥网站建站建设
  • 淘宝客搜索网站怎么做中信建设有限责任公司董事长
  • 公司网站建设方案模板下载做交易网站需要办什么证
  • 微信、网站提成方案点做百度seo和谷歌seo有什么区别
  • 网站图片的像素网站导入链接
  • wordpress网站服务时间辽宁省建设工程信息网官网新网站入口
  • 济南电商网站建设甘肃省 网站建设 审批
  • 平台网站建设设计南昌企业网站排名优化
  • 上海工商信息查询网百度seoo优化软件
  • 余姚住房和建设局网站快速开发网站
  • 网站支付开发wordpress和hugu
  • wordpress 主题 首页南京百度seo代理
  • 定西市建设网站费用如何防止网站挂马
  • 武义建设局网站首页泉州做网站工作室
  • 辽宁旅游网站开发网络管理网址
  • 推广引流吸引人的标题怎么做网站的排名优化
  • 公众号电影网站是怎么做的wordpress新建页面教程
  • 网站备案怎么注销关键词采集软件
  • 广州市网站建设品牌wordpress happywordz
  • 展示网站深圳seo