Filter过滤器
1.概述
- Filter过滤器是JavaWeb的三大组件之一(servlet程序、Listener监听器、Filter过滤器)。
- Filter是JavaEE的规范,也就是接口。
- 作用:拦截请求、过滤响应.
- 拦截请求的应用场景:权限检查、事务管理、日记操作…
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理
2.Filter实现权限拦截
Filter开发步骤
- 实现javax.servlet包下的Filter接口
- 重写doFilter()方法
- 注意在方法内部filterChain.doFilter(servletRequest,servletResponse);//让请求继续走,如果不写,请求到这就被拦截停止了。
- 在web.xml配置相关信息(也可以在注解中(WebFilter()))
实现对全部请求处理字符集编码
@WebFilter("/*")
public class CharsetFilter implements Filter {
//实现对全部请求处理字符集编码
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest, servletResponse);
}
}
实现登录访问拦截
避免用户直接跳过登录访问welcome.jsp
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
loginFilter
@WebFilter("/welcome.jsp")
public class loginFilter implements Filter {
//专门用来拦截请求,过滤请求
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
Object user = httpServletRequest.getSession().getAttribute("user")