Filter
来源:互联网 发布:怎么申请淘宝儿童模特 编辑:程序博客网 时间:2024/05/17 23:43
Filter主要对用户的请求进行预处理,也可以对HttpServletResponse进行后处理。主要流程:Filter对用户的请求进行预处理,然后交给Servlet进行处理并生成响应,最后Filter再对服务器响应做后处理。
Filter的作用:
- 用户授权的Filter:Filter负责检查用户请求,过滤用户的非法请求。
- 日志Filter:详细记录某些特殊用户的请求。
- 负责解码Filter:包括对非标准编码的请求解码。
- 改变XML内容的XSLT Filter等。
- Filter可负责拦截多个请求或响应;一个请求或响应可以被多个Filter拦截。
Filter类
创建Filter要实现javax.servlet.Filter的接口,其中有三个方法:
- void init(FilterConfig config) 进行初始化
- void destory()用于Filter销毁前,一些资源的回收
- void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) 实现过滤功能
配置Filter
配置Filter和Servlet非常相似,都需要配置Filter名和Filter拦截URL的模式
配置Filter有两种方式:
- Filter类中通过注解来进行配置
- 在web.xml文件中通过配置文件来进行配置
一个过滤的例子
AuthorityFilter.java
package filter;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;//配置Filter,方法一:注解配置@WebFilter(filterName = "filter", urlPatterns={"/*"}, initParams={ @WebInitParam(name="encoding",value="UTF-8"), @WebInitParam(name="loginPage",value="/login.jsp"), @WebInitParam(name="proLogin",value="/proLogin.jsp") })public class AuthorityFilter implements Filter { //用于访问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 loginPage = config.getInitParameter("loginPage"); String proLogin = config.getInitParameter("proLogin"); //设置request编码用的字符集 request.setCharacterEncoding(encoding); HttpServletRequest requ = (HttpServletRequest) request; HttpSession session = requ.getSession(true); //获取请求页面 String requestPath = requ.getServletPath(); if(session.getAttribute("user") == null && !requestPath.endsWith(loginPage) && !requestPath.endsWith(proLogin)){ request.getRequestDispatcher(loginPage).forward(request, response); } else{ chain.doFilter(request,response); } }}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>filter</display-name> <servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping> <!--web.xml配置Filer--> <filter> <!--Filter的名字--> <filter-name>filter</filter-name> <!--Filter类--> <filter-class>filter.AuthorityFilter</filter-class> <!--Filter参数的值--> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>loginPage</param-name> <param-value>/login.jsp</param-value> </init-param> <init-param> <param-name>proLogin</param-name> <param-value>/proLogin.jsp</param-value> </init-param> </filter> <!--Filter拦截的模式--> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
1 0
- Filter
- Filter
- Filter
- filter
- filter
- Filter
- filter
- Filter
- filter
- filter
- Filter
- Filter
- Filter
- Filter
- filter
- Filter
- Filter
- filter
- Comparable
- Git命令
- Android使用ViewPager实现图片的轮播
- ELK 问题
- Swift base64转成图片以及字符串,以及图片和字符串转成 base64的方法
- Filter
- intellij 和 spark 源码
- 嵌入式笔试题一
- linux之/proc目录CPU解说
- ABP Asp.net(c#) 找不到组件问题的解决
- 设计模式六大原则
- 使用手机号登录、注册、重置密码
- Java多线程(九)——wait() notify() notifyAll()
- log4j.properties配置详解