SpringBoot拦截器

2021-12-19  本文已影响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");
    }
}

上一篇下一篇

猜你喜欢

热点阅读