在配置filter中的拦截功能时候 ,我们在web.xml中进行配置文件。filter过滤文件有系统自己带有的,还有就是我们手写的filter文件。网页调用servlter的时候,我们可以在此之前调用filter文件进行过滤然后在执行active里面的方法

1.要想一个类文件成为一个过滤器文件,着该类实现java.selver.filter的接口。

创建filter类要分为两个步骤

建立filter处理类

FilterConfig可以获取部署描述符文件(web.xml)中分配的过滤器初始化参数。

FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。

FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。

web.xml文件配置Filter

实现接口的3个方法

《在此要看filter的api里面的方法》

1.1 init(FilterConfig filterConfid);

(服务器刚刚启动是会创建实例,这   个方法得到调用)这个方法可以读取web.xml中的servlet过滤的初始化参数

1.2 doFilter(ServletResquest request,ServletReaponse reponse,FilterChain chain);

ServletResquest 是接口 要用httpServletResquest的接口继承的  而   chain.toFilter();//chain.doFilter(request, response);  请求回转的方法

1.3 destroy();

下面是直接到页面

//res.sendRedirect("../failure.jsp");

下面这个是通过读取Filter文件进行跳转

//res.getRequestDispatcher(login).forward(request, response);

实例

package com.ljq.servlet;

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.HttpSession;

public class AuthorityFilter implements Filter {

private FilterConfig config;

// 实现初始化方法

public void init(FilterConfig config) {

this.config = config;

}

// 实现销毁方法

public void destroy() {

this.config = null;

}

// 执行过滤的核心方法

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

// 获取该Filter的配置参数

String encoding = config.getInitParameter("encoding");

String login = config.getInitParameter("login");

// 设置request编码用的字符集

request.setCharacterEncoding(encoding);

HttpServletRequest req = (HttpServletRequest) request;

//获取session对象

HttpSession session = req.getSession();

// 获取客户请求的路径

String requestPath = req.getServletPath();

// 如果session范围的user为null,即表明没有登录

// 且用户请求的既不是登录页面,也不是处理登录的页面

if (session.getAttribute("username") == null

&& !requestPath.endsWith(login)) {

// forward到登录页面

request.setAttribute("A", "您还没有登录");

request.getRequestDispatcher

(login).forward(request, response);

}

// 放行请求

else {

chain.doFilter(request, response);

}

}

}

Web.xml的实体类

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 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_2_5.xsd">

<!-- 定义Filter -->

<filter>

<filter-name>authority</filter-name>

<filter-class>com.ljq.servlet.AuthorityFilter</filter-class>

<!-- 下面3个init-param元素配置了3个参数 -->

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>login</param-name>

<param-value>/login.jsp</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>authority</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

文件是读取web.xml里面的<init-param></init-param>里面的属性  param-name得到value的值

也可以这样子的格式

下面只有一个过滤文件

<filter>

<!-- Filter 的名字 -->

<filter-name>security</filter-name>

<!-- Filter 的实现类 -->

<filter-class> test.filter.SecurityFilter</filter-class>

</filter>

<!-- 定义Filter 拦截地址 -->

<filter-mapping>

<!-- Filter 的名字 -->

<filter-name> security </filter-name>

<!-- Filter 负责拦截的URL -->

<url-pattern>/security/*</url-pattern>

</filter-mapping>

filter-自己的理解的更多相关文章

  1. java filter的一些理解

    java filter即  java中的过滤器: 一. * web项目中只有三个组件 * 过滤器filter  ↓    级 别 * 监听器            ↓   级 别 * servlet  ...

  2. org.springframework.web.filter.DelegatingFilterProxy的理解

    org.springframework.web.filter.DelegatingFilterProxy可以将filter交给spring管理. 我们web.xml中配置filter时一般采用下面这种 ...

  3. elastic 查询案例Query与Filter + CRUD简单理解 + dynamic mapping + keyword

    1.增 PUT mytest01/external/ { "name": "xiaowei" } curl -XPUT '192.168.1.49:9200/m ...

  4. Python内置函数filter, map, reduce

    filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当 ...

  5. python map, reduce,filter 使用

    参考python built-on function: http://docs.python.org/2.7/library/functions.html?highlight=map%20reduce ...

  6. [三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路

    Stream的概念定义   官方文档是永远的圣经~     表格内容来自https://docs.oracle.com/javase/8/docs/api/   Package java.util.s ...

  7. Array.prototype.filter(Boolean)

    ES5 中的数组有这个方法:Array.prototype.filter ,具体使用参考MDN,这里讲一个特殊应用: 回顾下语法: new_array = arr.filter(callback[, ...

  8. Java之Filter

    一.何为Filter? Filter也称之为过滤器,它是Servlet技术中比較激动人心的技术.WEB开发者通过Filter技术.对webserver管理的全部web资源.换句话说其主要用于前台向后台 ...

  9. python内置函数map/reduce/filter

    python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架 ...

  10. Python内置函数之filter map reduce

    Python内置函数之filter map reduce 2013-06-04 Posted by yeho Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对 ...

随机推荐

  1. java类初始化的过程

    在复习Thinking in java的过程中看到了相关内容,顺便整理一下,像下面一样的代码具体的执行顺序(ABCD都是类) public class A { public A(String text ...

  2. SpringBoot RESTful 应用中的异常处理小结

    转载:https://segmentfault.com/a/1190000006749441 @ControllerAdvice 和 @ExceptionHandler 的区别 ExceptionHa ...

  3. 快速创建一个springboot项目

    创建一个maven项目(springboot.mybatis-plus) 目标:可以访问ftl页面.对象(json字符串),可以进行单元测试 1.新建一个maven项目,选择模板maven-arche ...

  4. 使用Charles检测HTTPS网站的数据包

    1.下载Charles 下载地址:https://www.charlesproxy.com/download/ 2.安装Charles的证书 选择Help->SSL Proxying->I ...

  5. .NET Core Analysis

    .NET Core 1.0.1 Module Component .NET Core MongoDB MongoDB.Driver There has a nuget package availabl ...

  6. rosetta2014/2015安装时出现INCLUDE(keyerror)错误,解决。

    错误: KeyError: 'INCLUDE' 使编译出错 解决方法: [usrname@host source]$ vim tools/build/site.settings 注释# "i ...

  7. Testlink部署全攻略

    部署前准备: xampp,我下载的链接:https://www.apachefriends.org/download.html Testlink,下载地址:https://sourceforge.ne ...

  8. 与资源库同步时,我的svn报错 Previous operation has not finished; run 'cleanup' if it was interrupted

    解决办法:选择你的项目,右键,小组(Team),刷新或清理(Refresh or Clean)即可.

  9. 关于DoesObjectExist

    目录: 我们可以看到这个文件夹目录是存在的 文件: 然后,我们运行测试一下: 文件存在检测成功(正常) 文件夹存在,但检测失败! ??? 明明存在的,为什么检测不到……

  10. swift基础:第一部分:基本数据类型及结构

    首先谈点开心的:今天是周二,广州的天气格外明朗,早上上班的心情也不一样,最值得高兴事,很快到五一劳动节了,说到劳动节,放假是吧.你懂的.再来谈谈我上周的工作总结,上周可以说是黑轮压城城欲摧,甲光向日金 ...