Servlet过滤器
来源:互联网 发布:网络维护明细 编辑:程序博客网 时间:2024/06/10 18:17
Servlet过滤器
功能:可以动态地拦截请求和响应,以对请求和相应进行相应的处理
常见的过滤器类型
- 身份验证过滤器
- 数据压缩过滤器
- 加解密过滤器
- 日志记录和审核过滤器
- 字符编码过滤器
配置
过滤器通过Web.xml中的XML标签来声明,然后映射到应用程序中Servlet名称或者URL模式中。当Web容器启动Web应用程序时候,它会为web.xml中声明的每一个过滤器创建一个实例。
<filter> <filter-name>login</filter-name> <filter-class>com.zeus.filter.LoginFilter</filter-class> <init-param> <param-name>username</param-name> <param-value>admin</param-value> </init-param></filter><filter-mapping> <filter-name>login</filter-name> <url-pattern>/*</url-pattern> <!--<servlet-name></servlet-name>--></filter-mapping>
在Servlet3.0中,可以通过注解的形式声明一个Filter,而且还能开启异步支持,这是Servlet3.0的亮点之一
@WebFilter( urlPatterns = "/*", filterName = "login", initParams ={ @WebInitParam(name="username",value = "admin"), @WebInitParam(name="password",value = "password") }, asyncSupported = true)public class LoginFilter implements Filter { private static final String USERMANE = "username"; private static final String PASSWORD = "password"; private Set<String> pairs = new ConcurrentSet<>(); @Override public void init(FilterConfig filterConfig) throws ServletException { //get init username String username = filterConfig.getInitParameter(USERMANE); //.... } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //do...something chain.doFilter(request, response); //do..something } @Override public void destroy() { //... }}
执行顺序
Filter的执行顺序与web.xml配置文件中的配置顺序一致,写在前面的Filter会比后面的Filter要早运行,一般把Filter配置在所有的Servlet之前
在servlet3.0中,由于Filter不在web.xml中配置了,因此其==按照Filter文件名的字母序==的方式运行,例如Filter1_login.java会比Filter2_encoding.java先运行
所有的Filter组装成一个链式结构对请求和相应进行过滤。假如我们有三个Filter,连接方式为Filter1->Filter2->Filter3,如果一个reuqest刚好满足这三个Filter的过滤条件,那么request和response通过Filter的顺序为:
常用方法
- doFilter:实际的过滤方法,执行完成后调用FilterChain来访问后续过滤器
- init:Web应用程序启动的时候创建Filter实例,并调用其init方法。开发成员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象
- destory():servlet容器在销毁过滤器实例前调用该方法
1 0
- servlet 过滤器
- Servlet 过滤器
- servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet过滤器
- Servlet 过滤器
- LeetCode算法题——17. Letter Combinations of a Phone Number
- 都是类型惹的祸——小心unsigned
- POJ2288(状压DP)
- HDU1542 Atlantis 基于线段树的扫描线
- 猜算式
- Servlet过滤器
- centOS 6.5 mysql5.6忘记密码后重置密码
- 名企笔试:百度2015春季实习生(01排序) 2017-04-06 算法爱好者
- 链表面试题--从尾到头打印单链表
- 设计模式之单例模式
- 诡异代码-js-2
- POJ_2388_Who's in the Middle && 【快排,堆排实现】
- CodeForces 536A---Tavas and Karafs
- Palindrome Linked List