您的位置:首页 > Web前端 > JavaScript

过滤器Filter

2016-08-04 00:13 246 查看
Filter作用:

对客户端所传递的参数做前置处理,如编码转换。
对用户的权限进行检查,登录验证。

过滤器的生命周期

和Servlet一样,过滤器的生命周期分为四个阶段。

实例化,实现javax.servlet.Filter接口。
读取过滤器的初始化函数,调用init()方法。
完成对请求或过滤的响应,调用doFilter()方法。
销毁过滤器,调用destroy()方法。

1、编码过滤,解决中文乱码问题
package com.mipo.filter;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//编码过滤
public class EncodingFilter implements Filter {

public EncodingFilter() {

}

//当服务不在使用该filter功能的时候被web容器调用,此后的web请求将不在进行doFilter中的处理。
public void destroy() {

}

//当客户端请求服务资源或是回复的时候调用该方法进行filter功能处理。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}

//当servlet容器创建该filter实例的时候调用该方法进行初始化设置。
public void init(FilterConfig fConfig) throws ServletException {

}

}


2、登录验证,防止未经登录直接访问
package com.mipo.filter;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//登录验证
public class LoginFilter implements Filter {

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession();

//如果第一次请求不是登录页面,那就对session中内容进行检查;如果是登录页面就不检查,避免造成循环重定向
if(!"login.jsp".equals(req.getContextPath().endsWith("login.jsp"))) {
//如果session为null或session中没有登录者的信息,重定向到登录页面
if(null == session || null == session.getAttribute("user")) {
res.sendRedirect(req.getContextPath()+"/login.jsp");
//结束运行
return;
}
}
//session中的内容与登录者信息匹配,则继续往下执行
chain.doFilter(req, res);
}

public void init(FilterConfig fConfig) throws ServletException {

}

}


Filter在web.xml中的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>过滤器</display-name>
<!-- 先进行编码过滤 -->
<servlet>
<servlet-name>encoding</servlet-name>
<servlet-class>com.mipo.servlet.EncodingFilter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>encoding</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- 再进行登录验证 -->
<filter>
<filter-name>login</filter-name>
<filter-class>com.mipo.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSP Filter过滤器