全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

servlet过滤器(Filter)详解(九)

本文实例为大家分享了servlet过滤器的具体代码,供大家参考,具体内容如下

1.servlet过滤器产生背景

  项目中我们会遇到这样一类的需求,对访问服务器的用户ip实施过滤,只有在允许名单中的ip才能访问服务,为了实现需求,每当有客户端请求时,我们都会写校验ip的代码,客户端能够访问到的servlet我们都需要这样做,很明显这样做有一个缺点,就是代码冗余,维护不方便,如果验证规则改变,修改起来也特别麻烦。

  为了解决以上问题,Filter 技术应运而生。

2.servlet过滤器是什么?

  servlet过滤器是在java servlet 2.3 中定义的。它能够对servlet容器传给servlet组件的ServletRequest 对象和 ServletResponse对象进行检查和修改。

3.案例

  所有servlet过滤器都要实现javax.servlet.Filter接口。

NoteFilter

package com.learn;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by Administrator on 2017/09/29.
 */
public class NoteFilter implements Filter {

 private FilterConfig config = null;

 private String ipTable = null; //ip名单


 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
  System.out.println("note filter initial");
  this.config = filterConfig;
  this.ipTable = config.getInitParameter("ipTable");

 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  System.out.println("do filter starting");

  //校验ip地址
  if(!veryfyIP(request,response))
   return;

  long befor = System.currentTimeMillis();
  config.getServletContext().log("before call note Filter");

  chain.doFilter(request,response);

  config.getServletContext().log("after call note Filter");
  long after = System.currentTimeMillis();

  String name ="";
  if(request instanceof HttpServletRequest){
   name = ((HttpServletRequest) request).getRequestURI();
  }
  config.getServletContext().log("Note Filter : name:"+name +" time :"+(after -befor)+"ms");


 }

 @Override
 public void destroy() {

 }

 private boolean veryfyIP(ServletRequest request, ServletResponse response){

  String ip = request.getRemoteAddr();
  System.out.println("请求ip:"+ip);
  System.out.println("ipTable 黑名单:"+ipTable);

  if(ip.indexOf(ipTable) == -1){
   System.out.println("校验不通过");
   response.setContentType("text/html");
   PrintWriter out = null;
   try {
    out = response.getWriter();
    out.print("<h1>对不起,你的ip不能访问服务器</h1>");
    out.flush();
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return false;

  } else {
   return true;
  }

 }


}

NoteServlet

package com.learn;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by Administrator on 2017/09/29.
 */
public class NoteServlet extends HttpServlet {

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  System.out.println("已经通过了过滤器");


 }
}

web.xml配置

<filter>
  <filter-name>ip</filter-name>
  <filter-class>com.learn.NoteFilter</filter-class>
  <init-param>
   <param-name>ipTable</param-name>
   <param-value>127.0.0.1</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>ip</filter-name>
  <url-pattern>/note</url-pattern>
 </filter-mapping>
<servlet>
  <servlet-name>note</servlet-name>
  <servlet-class>com.learn.NoteServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>note</servlet-name>
  <url-pattern>/note</url-pattern>
 </servlet-mapping>

结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# servlet  # 过滤器  # Filter  # java servlet过滤器使用示例  # 基于java servlet过滤器和监听器(详解)  # Servlet 过滤器详细介绍  # 详解Servlet之过滤器(Filter)  # Servlet中配置和使用过滤器的步骤记录  # 这样做  # 客户端  # 是在  # 都要  # 应运而生  # 很明显  # 大家分享  # 来也  # 具体内容  # 大家多多  # 有一个  # 不通过  # 通过了  # IOException  # Administrator  # Created  # PrintWriter  # http  # import  # learn 


相关文章: 山东云建站价格为何差异显著?  如何用IIS7快速搭建并优化网站站点?  c++怎么用jemalloc c++替换默认内存分配器【性能】  高防服务器:AI智能防御DDoS攻击与数据安全保障  微信h5制作网站有哪些,免费微信H5页面制作工具?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何基于云服务器快速搭建个人网站?  C#如何在一个XML文件中查找并替换文本内容  如何通过西部数码建站助手快速创建专业网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何在宝塔面板中创建新站点?  python的本地网站制作,如何创建本地站点?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何通过FTP空间快速搭建安全高效网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何快速搭建高效简练网站?  建站之星3.0如何解决常见操作问题?  如何选择适合PHP云建站的开源框架?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何在建站之星绑定自定义域名?  如何在香港服务器上快速搭建免备案网站?  建站之星安装路径如何正确选择及配置?  网站制作公司排行榜,抖音怎样做个人官方网站  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何通过.red域名打造高辨识度品牌网站?  PHP 500报错的快速解决方法  如何快速生成橙子建站落地页链接?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  ppt制作免费网站有哪些,ppt模板免费下载网站?  代购小票制作网站有哪些,购物小票的简要说明?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  红河网站制作公司,红河事业单位身份证如何上传?  如何通过商城自助建站源码实现零基础高效建站?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  深圳网站制作案例,网页的相关名词有哪些?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  微课制作网站有哪些,微课网怎么进?  如何做静态网页,sublimetext3.0制作静态网页?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何高效完成独享虚拟主机建站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  购物网站制作公司有哪些,哪个购物网站比较好?  如何在阿里云服务器自主搭建网站?  C++中引用和指针有什么区别?(代码说明)  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  制作网站的基本流程,设计网站的软件是什么?  网站按钮制作软件,如何实现网页中按钮的自动点击? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。