过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了治多免费建站欢迎大家使用!在请求到达Servlet/JSP之前,过滤器截获请求。
在响应送给客户端之前,过滤器截获响应。
多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射的顺序决定。
最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。
我们需要实现一个Filter接口,导入import javax.servlet.*,并实现其中的抽象方法。
import javax.servlet.*;
import java.io.IOException;
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 {
}
@Override
//删除过滤器
public void destroy() {
}
}
以上操作和Servlet很相似,也可以理解为Filter就是一个Servlet,只是Filter所对应的功能和位置不相同。
配置映射路径:
过滤器配置映射路径有两种方法,第一种方法就是在web.xml中配置
login.jsp 过滤器配置映射 LoginFilter com.scores.filter.LoginFilter LoginFilter /*
第二种方法就是利用注解的方式进行配置( 拦截的路径 /*:拦截所有的请求)
@WebFilter(urlPatterns = {"/*"})
配置完成之后接下来我们就可以给LoginFilter写上一些输出语句及逻辑判断
package com.scores.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
//获取当前uri
String uri = request.getRequestURI();
//通过这条输出语句可以清楚的看到被拦截的请求
System.out.println("doFilter"+uri);
//通过过滤器----允许通过
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
在实行不同的要求时可以用不同的逻辑判断来完成,例如你想完成必须要有用户登录才能继续访问后续页面的要求,就可以在doFilter中加入逻辑判断,假如nowses就代表你的账号密码。
//逻辑判断
Object loginuser = request.getSession().getAttribute("nowses");
//如果他这个loginuser不为空
if(loginuser != null){
//允许通过
filterChain.doFilter(servletRequest,servletResponse);
}else{
//跳转回登录页面
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.sendRedirect("/ScoresWeb/login.jsp");
}
总结:
过滤器:根据业务需求对请求进行拦截。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧