HttpServletRequest继承自ServletRequest
HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。如:
getHeader(), getMethod() , getSession()
所以,当需要使用一些Http协议方法时,需通过ServletRequest创建HttpServletRequest对象。如:
// 将servletRequest转换成HttpServletRequest
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
完整示例:登录账户过滤器。
package com.example.utils;
import com.example.dto.Student;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.net.URI;
/**
* @Description 登录过滤器
* @Author li
* @Date 2022/3/15
*/
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 过滤器业务
// 拦截所有请求 包括所有受限资源和非受限资源
// 将servletRequest转换成HttpServletRequest
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 通过request对象获取用户的请求路径
// String requestURL = request.getRequestURL().toString(); // 完整路径 http://localhost:8080/demo4/IndexPageFilter
String requestURI = request.getRequestURI(); // 项目路径 /demo4/IndexPageFilter
String requestPath = requestURI.substring(requestURI.lastIndexOf("/") + 1); // 截取URI“/”后的部分 IndexPageFilter
// 判断是否为受限资源
if ("CheckServlet".equals(requestPath) || "login".equals(requestPath)) {
// 放行
filterChain.doFilter(servletRequest, servletResponse);
} else {
// 不放行
// 检查session中是否有用户信息
HttpSession session = request.getSession();
Student student = (Student) session.getAttribute("stu");
if (student != null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
request.setAttribute("tips", "请先登录");
request.getRequestDispatcher("login").forward(request, response);
}
}
}
@Override
public void destroy() {
}
}