❶ servlet过滤器问题
当然可抄以了,分别定义两个java文件,比如:EncodingFilter(解决编码)和LoginFilter(解决用户登录),
但是必须在web.xml里分别指出. 就行了,
注意:LoginFilter最好不使用/*,最好是/LoginFilter/*(LoginFilter也可以是别的).
这样就好用了,我试也成功了
❷ servlet过滤器有什么作用,一般用在什么地方
1.什么叫过滤器呢?
过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和
服务器回应给浏览器的内容,他可以进行过滤。这个过滤过程中可以拦截浏览
器发出的请求和服务器回应给浏览器的内容。拦截之后,就可以进行查看,并且
可以对拦截内容进行提取,或者进行修改。
Servlet过滤器拦截请求和响应,以便查看,提取或操作客户机和服务器之间
交换数据。
2.Servlet过滤器的用途:
用户认证与授权管理:我们开发一个web应用,肯定有不同权限的用户,有管理员,有普通用户。而管理员又可能分为一级管理员,二级管理员,三级管理员。每一级管理员可能又有不同的管理权限操作,访问不同的资源。过去我们可能都是在jsp页面,servlet中加以权限的控制。通过session,看他是否有这个权限,如果有,则让他操作某个资源。这些都是些共性。那么现在我们就可以把他提取出来。让他通过过滤器来实现;用户来访问一个资源,我们通过过滤器来过滤这个请求,在程序中判断是否有权限来访问这个资源;
有,则让他去访问,没有,就让他转到另外一个页面。这样通过过滤器就实现了授权管理;
统计web应用的访问量,和访问的命中率,报告;
实现web应用的日志处理功能;
实现数据压缩功能;
对传输的数据进行加密;
实现XML文件的XSLT转换;
❸ Servlet过滤器
主要用于服务器和数据库之间交互的过滤,比如:页面上不能显示中文,可以加一个EncodingFilter,帮助转码!
请求是客户端向服务器request数据,响应是服务器向客户端respose数据,他们之间的格式等可能存在差异,所以需要转换!
❹ 编写servlet过滤器时下面哪个接口用于调用过滤器连接
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
/*
-
❺ 关于servlet过滤器的问题
向下是指向下一个过滤器,因为可能同时拥有多个过滤器,一个过滤器结束后需要传给下一个过滤器,直到运行完所有的过滤器。
❻ 我写的servlet过滤器有问题大家看看这是怎么了谢谢
你的url-pattern应该是*或者*.jsp了吧,反正过滤器包含了index.jsp,每次访问都经过这个过滤器,然后
if(session.getAttribute("user")==null){一直成立,所以浏览器一直在访问这个index.jsp,每次都被重定向到index.jsp,就出现了你说的那种情况。
你现在有两种方式解决这个问题
1、url-pattern改改,反正就是不让包含index.jsp
2、改filter的代码,
if(session.getAttribute("user")==null){
这个判断加一个条件if(session.getAttribute("user")==null && !"/index.jsp".equals(从request获取的URI)){,//反正就这意思,具体访问那个index.jsp的URI放那就行了,你可以先打印出来看看是什么
你可以把你web.xml的filter配置粘贴出来看看
❼ servlet怎么使用多个过滤器
只需要一个过滤器,过滤所有URL,在filter类中做如下操作:代码参考,相信你会懂的。
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)request;
Stringuri=((HttpServletRequest)request).getRequestURI();
List<String>urilist=newArrayList<String>();
urilist.add("/UserLoginReg/DoRegisterServlet");
urilist.add("/UserLoginReg/UserManageServlet");
urilist.add("/UserLoginReg/FindUserServlet");
if(urilist.contains(uri)==true){
HttpSessionsession=req.getSession(true);
//从session里取的用户名信息
UserBeanuser=(UserBean)session.getAttribute("userall");
//判断如果没有取到用户信息,就跳转到登陆页面
if(user==null){
//跳转到登陆页面
request.setAttribute("info","请先登录");
req.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,
response);
}else{
//已经登陆,继续此次请求
chain.doFilter(request,response);
}
}else{
//已经登陆,继续此次请求
chain.doFilter(request,response);
}
}
❽ 编写servlet过滤器是,哪个接口用于调用过滤器链中下一个过滤器
1、首先要明确拦截器、滤器
1.1 拦截器:
拦截器AOP(Aspect-Oriented Programming)用于某或字段访问前进行拦截前或加入某些操作拦截AOP种实现策略
Webwork文文档解释——拦截器态拦截Action调用象提供种机制使发者定义action执行前执行代码action执行前阻止其执行同提供种提取action重用部式
谈拦截器词家应该知道——拦截器链(Interceptor ChainStruts 2称拦截器栈 Interceptor Stack)拦截器链拦截器按定顺序联结条链访问拦截或字段拦截器链拦截器按其前定义顺序调用
1.2. 拦截器实现原理:
部候拦截器都通代理式调用Struts 2拦截器实现相简单请求达Struts 2ServletDispatcherStruts 2查找配置文件并根据其配置实例化相拦截器象串列表(list)调用列表拦截器
1.3 滤器
滤器程序先于与相关servlet或JSP页面运行服务器滤器附加或servlet或JSP页面并且检查进入些资源请求信息滤器作选择:
①规式调用资源(即调用servlet或JSP页面)
②利用修改请求信息调用资源
③调用资源发送响应客户机前其进行修改
④阻止该资源调用代转其资源返特定状态代码或替换输
1.4 Servlet滤器基本原理
Servlet作滤器使用客户请求进行处理处理完交给滤器处理客户请求滤链逐处理直请求发送目标止例某网站提交修改注册信息网页用户填写完修改信息并提交服务器进行处理需要做两项工作:判断客户端否效;提交数据进行统编码两项工作由两滤器组滤链进行处理滤器处理功提交数据发送终目标;滤器处理功视图派发指定错误页面
-
❾ 编写servlet过滤器,下面哪个接口用于调用过滤器链中下一个过滤器
一个filter必须实现javax。servlet。Filter接口定义的三...个过滤器的过滤条件时该请求就会交给这个过滤器