问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写servlet过滤器时下面哪个接口用于调用过滤器连接

发布网友 发布时间:2022-04-28 17:33

我来回答

1个回答

热心网友 时间:2022-06-21 01:00

Filter简介

Filter称滤器Servlet技术实用技术Web发员通Filter技术web服务器管理所web资源:例Jsp,
Servlet, 静态图片文件或静态 html
文件等进行拦截实现些特殊功能例实现URL级别权限访问控制、滤敏词汇、压缩响应信息等些高级功能

主要用于用户请求进行预处理HttpServletResponse进行处理使用Filter完整流程:Filter用户请求进行预处理接着请求交给Servlet进行处理并响应Filter再服务器响应进行处理

Filter功能

HttpServletRequest达 Servlet 前拦截客户HttpServletRequest 根据需要检查HttpServletRequest修改HttpServletRequest 数据
HttpServletResponse达客户端前拦截HttpServletResponse 根据需要检查HttpServletResponse修改HttpServletResponse数据

何借助Filter实现拦截功能

Filter接口doFilter发员编写Filter并配置哪web资源进行拦截Web服务器每调用web资源service前都先调用filterdoFilter该内编写代码达目:

调用目标资源前让段代码执行
否调用目标资源(即否让用户访问web资源)
web服务器调用doFilter传递filterChain象进filterChain象filter接口重要象提供doFilter发员根据需求决定否调用调用该则web服务器调用web资源service即web资源访问否则web资源访问

Filter发两步走

编写java类实现Filter接口并实现其doFilter
web.xml文件编写filter类进行注册并设置所能拦截资源

web.xml配置各节点介绍:

指定滤器
用于滤器指定名字该元素内容能空
元素用于指定滤器完整限定类名
元素用于滤器指定初始化参数元素指定参数名字指定参数值
滤器使用FilterConfig接口象访问初始化参数
元素用于设置 Filter 所负责拦截资源Filter拦截资源通两种式指定:Servlet 名称资源访问请求路径
元素用于设置filter注册名称该值必须元素声明滤器名字
设置 filter 所拦截请求路径(滤器关联URL式)
指定滤器所拦截Servlet名称
指定滤器所拦截资源 Servlet 容器调用式REQUEST,INCLUDE,FORWARDERROR默认REQUEST用户设置元素用指定 Filter 资源种调用式进行拦截
元素设置值及其意义
REQUEST:用户直接访问页面Web容器调用滤器目标资源通RequestDispatcherinclude()或forward()访问该滤器调用
INCLUDE:目标资源通RequestDispatcherinclude()访问该滤器调用除外该滤器调用
FORWARD:目标资源通RequestDispatcherforward()访问该滤器调用除外该滤器调用
ERROR:目标资源通声明式异处理机制调用该滤器调用除外滤器调用

Filter链

web应用发编写Filter些Filter组合起称Filter链

web服务器根据Filterweb.xml文件注册顺序决定先调用哪Filter第FilterdoFilter调用web服务器创建代表Filter链FilterChain象传递给该doFilter发员调用FilterChain象doFilter则web服务器检查FilterChain象否filter则调用第2filter没则调用目标资源

Filter命周期

public void init(FilterConfig filterConfig) throws ServletException;//初始化
我编写Servlet程序Filter创建销毁由WEB服务器负责 web 应用程序启web 服务器创建Filter 实例象并调用其init读取web.xml配置完象初始化功能续用户请求作拦截准备工作(filter象创建init执行)发员通init参数获代表前filter配置信息FilterConfig象

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//拦截请求
完实际滤操作客户请求访问与滤器关联URL候Servlet滤器先执行doFilterFilterChain参数用于访问续滤器

public void destroy();//销毁
Filter象创建驻留内存web应用移除或服务器停止才销毁Web容器卸载 Filter 象前调用该Filter命周期仅执行释放滤器使用资源

FilterConfig接口

用户配置filter使用filter配置些初始化参数web容器实例化Filter象调用其init封装filter初始化参数filterConfig象传递进发员编写filter通filterConfig象获内容:

String getFilterName();//filter名称
String getInitParameter(String name);//返部署描述指定名称初始化参数值存返null.
Enumeration getInitParameterNames();//返滤器所初始化参数名字枚举集合
public ServletContext getServletContext();//返Servlet文象引用

Filter使用案例

使用Filter验证用户登录安全控制

前段间参与维护项目用户退系统再址栏访问历史根据url仍能够进入系统响应页面我检查发现请求未进行滤验证用户登录添加filter搞定问题

先web.xml配置

SessionFilter
com.action.login.SessionFilter

logonStrings
/project/index.jsp;login.do

includeStrings
.do;.jsp

redirectPath
/index.jsp

disabletestfilter
N

SessionFilter
/*

接着编写FilterServlet

package com.action.login;

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 javax.servlet.http.HttpServletResponseWrapper;

/**
* 判断用户否登录,未登录则退系统
*/
public class SessionFilter implements Filter {

public FilterConfig config;

public void destroy() {
this.config = null;
}

public static boolean isContains(String container, String[] regx) {
boolean result = false;

for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);

String logonStrings = config.getInitParameter("logonStrings"); // 登录登陆页面
String includeStrings = config.getInitParameter("includeStrings"); // 滤资源缀参数
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 没登陆转向页面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 滤器否效

if (disabletestfilter.toUpperCase().equals("Y")) { // 滤效
chain.doFilter(request, response);
return;
}
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");

if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 指定滤参数缀进行滤
chain.doFilter(request, response);
return;
}

if (this.isContains(hrequest.getRequestURI(), logonList)) {// 登录页面进行滤
chain.doFilter(request, response);
return;
}

String user = ( String ) hrequest.getSession().getAttribute("useronly");//判断用户否登录
if (user == null) {
wrapper.sendRedirect(redirectPath);
return;
}else {
chain.doFilter(request, response);
return;
}
}

public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
}

既完用户所请求均要经Filter进行验证用户登录

防止文乱码滤器

项目使用spring框架前台JSP页面Java代码使用同字符集进行编码候现表单提交数据或者传/载文名称文件现乱码问题使用滤器

encoding
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8

forceEncoding
false

encoding
/*

-
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 关于升旗仪式与出操的感想! 使用struts2.1需要编写过滤器吗 升旗感受 jsp\java如何编写过滤器过滤特殊字符 国旗和太阳一起升起 感受,20字左右 编写servlet过滤器时,哪个接口 谈谈对升国旗奏国歌的感想 升旗仪式的感想谁会写?急急急急急急急急急急急急急急! eclipse怎么自动创建过滤器 用C++编写一个文本过滤器!体现面向对象! 编写servlet过滤器,下面哪个接口用于调用过滤器链中下一个过滤器 编写servlet过滤器时,哪个接口用于调用过滤器链中下一个过滤器 用C++编写一个“BIFF过滤器” 升国旗的感想作文怎么写 编写servlet过滤器时,哪个接口用于调用过滤器中下一个过滤器 用C/C++编写一个“BIFF过滤器 看升旗的感受简短是什么? 用C++编写一个文本过滤器 jsp\java 如何编写过滤器过滤特殊字符? 在编写过滤器时,需要完成的方法 三年级升旗仪式,感想怎么写? 如何给smart sheet添加过滤器 素质评价升旗仪式详细描述和收获感想+怎么写(句子) 升旗手感言 a4腰iphone腿,还有什么神奇的东西 现代美女们A4腰和i6腿是什么意思? 醉了,a4腰已经过气了,i6腿又是什么鬼 女人马甲线a4腰6s腿是什么意思 网红等于小鲜肉吗? A4腰走了又来Iphone6 腿,为什么这种现象那么多 为什么中国人现在都追求“筷子腿”、“A4腰”这样极致的瘦? 杨幂:女生不一定要白幼瘦!在你心中,怎么样的女生才是最美丽的? 脸和身材相比,哪一个更重要? A4腰和苹果6腿等现象对女性和两性关系的影响 男大学生觉得女生脸和身材哪个更重要? 脸和身材哪个更重要? 太瘦比肥胖更危险是真的吗? i6腿是什么意思? 我是女的,不管胖瘦,都没有大腿缝隙,是因为我腿直吗? 腰是A4腰,腿也是A4腿怎么办&#xF602;?