美文网首页
SpringBoot拦截器

SpringBoot拦截器

作者: 放羊娃华振 | 来源:发表于2021-12-19 21:06 被阅读0次

    SpringBoot中拦截器是十分有用的,我们可以加拦截器中做用户登录态的校验,同时也可以加一个数据加解密的操作。实现拦截器的逻辑如下:
    1、自定义一个拦截器

    package com.stormdzh.study.springdemo.intercepter.user;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 登录拦截器
     */
    @Slf4j
    public class LoginIntercepter implements HandlerInterceptor {
    
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
            String requestURI = request.getRequestURI();
            log.info("preHandle拦截的请求路径是{}",requestURI);
            System.out.println("preHandle拦截的请求路径是{}"+requestURI);
    
            HttpSession session = request.getSession();
    
            Object ssuser = session.getAttribute("ssuser");
            if(ssuser != null){
                //true是放行
                return  true;
            }
            //拦截住未登录,跳转到登录页
            request.setAttribute("msg","请先登录!");
            //重定向
            //request.sendRedirect("/");
            //转发请求
            request.getRequestDispatcher("/comm/logout").forward(request,response);
            return false;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            String requestURI = request.getRequestURI();
            log.info("postHandle拦截的请求路径是{}",requestURI);
            System.out.println("postHandle拦截的请求路径是{}"+requestURI);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            String requestURI = request.getRequestURI();
            log.info("afterCompletion拦截的请求路径是{}",requestURI);
            System.out.println("afterCompletion拦截的请求路径是{}"+requestURI);
        }
    }
    
    

    2、添加一个配置文件,在配置文件中注册拦截器

    package com.stormdzh.study.springdemo.config.user;
    
    import com.stormdzh.study.springdemo.intercepter.user.LoginIntercepter;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * 1、编写一个拦截器实现HandlerInterceptor接口
     * 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)
     * 3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】
     */
    @Configuration
    public class AdminWebConfig  implements WebMvcConfigurer {
    
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
    
            registry.addInterceptor(new LoginIntercepter())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/","/login","/register","/css/**","/js/**","/images/**","/fonts/**"
                     ,"/comm/logout"
                    ,"/user/login");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:SpringBoot拦截器

          本文链接:https://www.haomeiwen.com/subject/rrnkfrtx.html