一、过滤器的作用
通过过滤器可以过滤请求,根据请求的参数决定是否放行
二、创建Filter
右键包名–> new–> Filter
二、EncodingFilter.java
package org.lanqiao.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;
/**
* Servlet Filter implementation class EncodingFilter
*/
@WebFilter(urlPatterns="/*") //拦截所有请求
public class EncodingFilter implements Filter {
/**
* 默认构造方法
* Default constructor.
*/
public EncodingFilter() {
// TODO Auto-generated constructor stub
}
/**
* 拦截器的销毁方法
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
System.out.println("拦截器销毁了...");
}
/**
* 拦截器的主要执行逻辑
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//设置中文字符集编码
request.setCharacterEncoding("utf-8");
System.out.println("设置了字符集编码");
response.setCharacterEncoding("utf-8");
chain.doFilter(request, response); //放行,执行原有的逻辑
}
/**
* 拦截器的初始化方法
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("拦截器初始化了....");
}
}
三、LoginFilter
登录拦截。没有登录不能进入其他网页
其中urlPattens="index.jsp"可以修改成/user/*的形式,用来过滤更多的请求。
package org.lanqiao.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;
/**
* Servlet Filter implementation class LoginFilter
*/
@WebFilter(urlPatterns="/index.jsp")
public class LoginFilter implements Filter {
/**
* Default constructor.
*/
public LoginFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入了登录过滤器");
//验证用户是否存在(是否已经登录)
//把request和response对象强制转换成HttpServletRequest对象
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
//取出session中的用户
Object obj=req.getSession().getAttribute("user");
if(obj==null) { //如果不存在,就返回登录页
resp.sendRedirect("login.jsp");
}else { //如果用户存在,就放行
chain.doFilter(request, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}