Filter
- Filter
- 概述
生活中的过滤器:净水器,空气净化器
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:
一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...
执行流程
-
- 环境搭建
1 创建filter.实现filter覆写方法
2 注册和映射
-
- 设置字符编码
-
- 设置字符编码-优化
以上程序已经解决了乱码问题,但是 还存在硬代码
可以使用初始化参数解决
-
- 登陆校验
package com.tledu.zrz.filter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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;
import javax.servlet.http.HttpSession;
@WebFilter("/*")
public class LoginFilter implements Filter {
private List<String> urls = new ArrayList<String>();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 项目主页
urls.add("/");
urls.add("/index.jsp");
// 登陆页面和登陆校验
urls.add("/login.jsp");
urls.add("/login");
urls.add("/checkCode");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 类型转换
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
// 1 先知道 那些不登录也可以访问 urls
// 2 获取当前请求的是谁,获取当前请求的url
String url = req.getServletPath();
// System.out.println(url);
// 3 判断当前请求的url是否在urls中
if (!urls.contains(url)) {
HttpSession session = req.getSession();
// 获取登陆的信息
String loginUser = (String) session.getAttribute("loginUser");
// 判断是否有信息
if (loginUser == null || loginUser.trim().equals("")) {
resp.sendRedirect("login.jsp");
return;
}
}
// 放行
chain.doFilter(request, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
-
- 登陆校验-优化
放行静态资源文件