一、过滤器(Filter):又称拦截器。实现Filter接口的类我们称之为Filter(过滤器或拦截器),Filter可以对用户访问的资源进行拦截。例如:客户端发送请求是,先将请求拦截下来,判断用户是否已登录,如果已登录则放行,反之则进入登录页面。

二、拦截器的使用:

  a)、在Filter里面可以用request获得请求消息,用response写入响应消息
  b)、chain.doFilter(request, response) 方法放行 目标Servlet使用的是同一个请求和响应
  c)、doFilter 方法后面的代码会执行,在目标Servlet 返回响应后执行, 也可以使用同一个请求和响应

三、拦截器的实现过程:

  a)、写一个类实现 Filter 接口 , 在doFilter 方法中写功能代码

 package com.st.filter;
import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.st.bean.UserBean;
public class FilterTest implements Filter {
@Override
public void destroy() {
// 生命周期结束,服务器停止时执行此方法
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
// 请求过滤器拦截的路径时执行此方法
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
//下面三句可以很好的解决乱码问题,需要注意的是这三句尽量放在最上面
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8"); String path = request.getServletPath();
if(path.endsWith("LoginServlet.do")){
arg2.doFilter(request, response);// 如果是以LoginServlet.do结尾则放行,执行LoginServlet
}
else{
UserBean user =(UserBean)request.getSession().getAttribute("USER_INFO");
if(user !=null) //用户已经登录,实现放行操作
arg2.doFilter(request, response);
else //用户没有登录,不放行,跳转到登录页面
request.getRequestDispatcher("/login.jsp").include(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// 生命周期开始,服务器启动后就会执行此方法
}
}

  b)、在web.xml中配置Filter拦截的资源路径

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>FilterService</servlet-name>
<servlet-class>com.st.service.FilterService</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.st.service.LoginServlet</servlet-class>
</servlet>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.st.filter.FilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping> <servlet-mapping>
<servlet-name>FilterService</servlet-name>
<url-pattern>/FilterService.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

12、Filter(拦截器)的更多相关文章

  1. java:(json,ajax,path,Oracle的分页实例,Filter拦截器)

    1.json: <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  2. Java filter拦截器的使用

    1.web.xml配置 <!-- 验证是否登录 拦截功能 --> <filter> <filter-name>isLogin</filter-name> ...

  3. springMVC学习(12)-使用拦截器

    一.拦截器配置和测试: 1)定义两个拦截器,(要实现HandlerInterceptor接口) HandlerInterceptor1: package com.cy.interceptor; imp ...

  4. 【快学springboot】12.实现拦截器

    前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...

  5. spring filter拦截器

    实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面.比较好的做法是不管什么人都不能直接访问jsp页面,要访问就通过action,这样就变成了一个实实在在的权限 ...

  6. Filter拦截器和Listen监听器

    Filte过滤器概述 1   过滤器是一个驻留在服务器端的Web组件,可以截取用户端和资源之间的请求响应信息,并对信息进行过滤 过滤的工作流程. 过滤器作用描述 1  ,在HttpServletReq ...

  7. 12.Struts2自定义拦截器

    12.自定义拦截器        拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...

  8. MVC5-11 浅谈拦截器

    Filter拦截器 Aop是MVC的主要设计方式之一,而微软也希望我们在使用MVC的时候更好的使用拦截器来进行切面编程.拦截器则是Mvc中的一大亮点与重点 AOP(面向切面)编程已经广泛应用在各个项目 ...

  9. 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行

    我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...

  10. SpringMVC拦截器(慕课网)

    拦截器:通过统一拦截从浏览器发往服务器的请求来完成功能的增强 使用场景:解决请求的共性问题 如:乱码.权限验证 基本工作原理:拦截器和过滤器的工作原理相似 乱码问题:使用Spring过滤器(Filte ...

随机推荐

  1. 西湖论剑2019-msc之奇怪的TTL

    msc1给了一串很长的TTL字符,参考一些隐写的文章,猜测是在ttl中藏了信息,题目是这样的 我们截获了一些IP数据报,发现报文头中的TTL值特别可疑,怀疑是通信方嵌入了数据到TTL,我们将这些TTL ...

  2. zabbix调用api检索方法

    环境 zabbix:172.16.128.16:zabbix_web:172.16.16.16/zabbix 用户名:Admin 密码:zabbix 获取的数据仅做参考,以Linux发送HTTP的PO ...

  3. struct导入项目工程时工程旁边出现红色的×号

    在我们学习java的过程中难免要导入java工程项目,那么当我们导进去的时候出现错误怎么办呢, 一,首先 二,其次 选择Properties 三,再选择 四,再选择 (高版本的选择1.5尽量用1.6的 ...

  4. 浏览器仿EXCEL表格插件 版本更新 - 智表ZCELL产品V1.3.2更新

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  5. C#:往数据库插入/更新时候关于NUll空值的处理

    前几天遇到一个问题,找了好久才找到解决办法.不过也很开心,终于解决了. 问题:前端当我数据为空的时候不赋值,传到后台也为空的时候(注意:是Null不是""),SqlCommand对 ...

  6. python在linux中用setproctitle自定义进程名

    在linux中,如果想用python自定义进程名,需要用到第三方库setproctitle. #coding:utf8 import setproctitle setproctitle.setproc ...

  7. git配置ssh秘钥(公钥以及私钥)

    桌面版git,  本文以github为例,gitlab等其它托管平台一样操作 当我们将代码托管到远程平台(GitHub.gitlab等)时, 我们需要在本地使用git进行push/pull代码时,需要 ...

  8. Java数据库学习之SQL语句动态拼接

    public class UserDaoImpl implements UserDao { @Override public List<User> getUserByPage(PageIn ...

  9. 【tool】部署前端工具

    一.部署前端工具如下: nodejsnpmwebpackvue 二.安装nodejs 1. 下载稳当版本nodejs 2. 配置环境变量 NODE_HOME=D:\soft\nodejs\ path= ...

  10. JQ倒计时,正计时

    <p class="lastP">距离二维码过期还剩<strong></strong>秒,过期后自动刷新页面.</p><scr ...