SpringBoot学习笔记:自定义的过滤器

SpringBoot学习笔记:自定义的过滤器

快速开始

  SpringBoot提供的前端控制器没法知足咱们产品的需求时,咱们须要添加自定义的过滤器。html

  在SpringBoot的开发中,咱们应该还据说过拦截器,他们的效果是同样的,都是对请求和响应进行过滤,但仍是有一点区别:前端

  • 过滤器是Servlet概念中定义的,须要收到容器的支持,如Tomcat;拦截器是Spring定义的,有Spring框架支持。
  • Filter只能用于Web开发,拦截器既能够用在Web开发,也能够用在App、Swing开发中。
  • 拦截器更加灵活,在Spring环境中更适合使用拦截器。

  因此,本片文章仅仅是讲解过滤器的使用,SpringBoot开发中建议使用拦截器,请看http://www.javashuo.com/article/p-djjjgquy-db.htmljava

编写过滤器web

package com.mrsaber.security;

import org.springframework.core.annotation.Order;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@Order(1)
@WebFilter(filterName = "MSecurity",urlPatterns = {"*.html"})
public class MSecurityFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
        System.out.println(request.getRequestURI());
        //检查是不是登陆页面
        if(request.getRequestURI().equals("/web/index.html"))
            filterChain.doFilter(servletRequest,servletResponse);

        //检测用户是否登陆
        HttpSession session =request.getSession();
        String status= (String) session.getAttribute("isLogin");
        if(status==null || !status.equals("true"))
        {
            try{  response.sendRedirect("/web/index.html");}catch (Exception e){}
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

说明:spring

  这里使用了注解@ WebFilter来代表这是一个过滤器,这是Servlet 3.0引入的新注解,一样还有@WebFilter 和 @WebListener,这就相似于咱们传统的WebServlet开发了session

注册过滤器框架

  使用嵌入式容器时,能够使用@ServletComponentScan启用@WebServlet,@ WebFilter和@WebListener注释类的自动注册。ide

@SpringBootApplication
@ServletComponentScan(basePackages = "com.mrsaber.security")
public class MsSupplyAndSaleApplication {
    public static void main(String[] args) {
        SpringApplication.run(MsSupplyAndSaleApplication.class, args);
    }

}
相关文章
相关标签/搜索