SpringBoot配置攔截器

1.編寫登錄攔截器

package com.xxx.interceptor;

import org.springframework.stereotype.Component;
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;
import java.io.PrintWriter;

/**
 * 登錄攔截器
 */
@Component
public class SessionInterceptor implements HandlerInterceptor {

    /**
     * 該方法將在請求處理之前進行調用,返回true會執行下一個Interceptor,
     * 返回false則不會執行下一個Interceptor也不會執行Controller裏的方法,
     * 先聲明的Interceptor的preHandle方法會先執行。
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("SessionInterceptor preHandle");
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("user") != null) {
            return true;
        } else {
            PrintWriter printWriter = response.getWriter();
            printWriter.write("{code: 501, message:'not login!'}");
            return false;
        }
    }

    /**
     * 該方法將在preHandle方法返回爲true,
     * 並且當前請求進行處理之後調用,
     * 先聲明的Interceptor的postHandle方法會後執行
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("SessionInterceptor postHandle");
    }

    /**
     * 該方法將在preHandle方法返回爲true,
     * 並且當前請求進行處理之後調用,
     * 一般用於進行資源清理
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("SessionInterceptor afterCompletion");
    }
}

2.將其添加到攔截配置類中

package com.xxx.config;

import com.xxx.interceptor.SessionInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private SessionInterceptor sessionInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sessionInterceptor)
                // 設置攔截所有路徑地址
                .addPathPatterns("/**")
                // 設置過濾不需要攔截的路徑地址,尤其是登錄地址一定要加上
                .excludePathPatterns("/user/login", "/error");
    }

}

此時登錄攔截器就配置好了,除了請求 /user/login 和/error 的請求都會被攔截器攔截

3.添加請求映射方法

在上面的WebMvcConfig類中添加

@Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 配置請求映射跳轉路徑
        registry.addViewController("/hi").setViewName("hi.html");
    }

所有請求對應的地址就可以直接跳轉到指定頁面中,減少冗餘頁面跳轉代碼。

4.添加靜態文件訪問路徑

在上面的WebMvcConfig類中添加

    /**
     * 添加靜態文件訪問路徑
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
    }

發佈了111 篇原創文章 · 獲贊 481 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章