javaweb--过滤器

过滤器指的是实现了Filter接口的Java类。用来拦截请求,已做其他处理。
此路是我开,此树是我栽,要从此路过,留下买路财!

过滤器是全局生效的。

第一种,非注解配置

第二种,注解配置

案例一:字符编码过滤器
以前写Servlet的时候每一个servlet都需要设置request和Response的编码、现在通过过滤器可以在调用servlet之前进行编码工作。

案例二:拦截登录
思想:除了登录页面和登录的请求是无条件的放行。其他的任意只要不登录全部调转到登录页面,一旦登录全部放行。

代码

/**

  • 登录拦截过滤器

  • @author IBM
    /
    @WebFilter("/
    ")
    public class LoginFilter implements Filter{

    @Override
    public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
    throws IOException, ServletException {
    //将父类转成子类
    HttpServletRequest request = (HttpServletRequest)servletrequest;
    HttpServletResponse response = (HttpServletResponse)servletresponse;

     //指定一些页面及请求放行
     String uri = request.getRequestURI();
     System.out.println("URI:"+uri);
     if(uri.contains("login.jsp") || uri.contains("LoginServlet")) {
     	filterchain.doFilter(servletrequest, servletresponse);
     }else {
     	//如果不是这两个地址,需要判断现在是否已经登录,如果没有登录直接请求到login.jsp
     	HttpSession session = request.getSession();
     	//获取session中的账号名称
     	Object attribute = session.getAttribute("JULK");
     	if(null != attribute) {
     		filterchain.doFilter(servletrequest, servletresponse);
     	}else {
     		request.setAttribute("msg", "非法操作,如果抓住你,打死你个鳖孙儿");
     		request.getRequestDispatcher("login.jsp").forward(request, response);
     	}
     }
    

    }
    }

Servlet代码

过滤器链
一个项目中存在多个过滤器就会形成过滤器链。

注解模式按照类的首字母排序ABCD…,如果有首字母相同,会顺延到第二个字母判断。

你可能感兴趣的:(javaWeb)