spring boot配置filter和interceptor

spring boot配置filter和interceptor

下面以普通的判断session是否为空的登录器来做说明

直接上代码

filter:

 首先准备好我们的filter

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.LogRecord;

public class TestFilter implements Filter{

     private static List<String> urlPaterrns=new ArrayList<String>();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        urlPaterrns.add("/demo/admin.jsp");//把想要忽略的url全部加进来,这只之加了一个

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpServletResponse response=(HttpServletResponse)servletResponse;
        String url=request.getRequestURI();
        System.out.print(url);         
        if(url.contains("login")||urlPaterrns.contains(url)){
            filterChain.doFilter(request,response);
            return;
        }
        HttpSession session=request.getSession();
        if(session!=null){
            filterChain.doFilter(request,response);
            return;
        }

        request.getRequestDispatcher("/login.jsp").forward(request,response);
    }

    @Override
    public void destroy() {

    }
}

  假设我们的请求是http://localhost:8080/admin/add,那么getRequestURI()得到的url是/admin/add


interceptor:

interceptor就没写其中的验证过程了,和filter中相似,只打印语句判断配置是否成功

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Interceptor1 implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.print("prehandle---------");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.print("afterCompletion---------");
    }
}



配置:

新建配置类

import com.bookstore.demo.controller.Interceptor1;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class Configurer extends WebMvcConfigurerAdapter{
//配置interceptor
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");//设置拦截器的类并设置拦截路径
        super.addInterceptors(registry);
    }

//配置filter
    @Bean
    public FilterRegistrationBean getFilter(){
        FilterRegistrationBean filterBean=new FilterRegistrationBean();
       filterBean.setFilter(new TestFilter());
       filterBean.addUrlPatterns("/*");//设置拦截路径
       filterBean.setOrder(1);
        return filterBean;
    }


}


这样就算配置完成了,其中可以自行去查看InterceptorRegistry和FilterRegistrationBean,其中还有一些不太主要的方法


                                                   

猜你喜欢

转载自blog.csdn.net/make__it/article/details/79252950