04.Springboot攔截器

首先,瞭解一下攔截器的作用,他是用來做登錄檢查的,也就是沒有前邊的登錄,就不可以訪問後邊的頁面

1. 先添加一個攔截器,我們新建一個登錄的攔截器在component包下,名字就叫  LoginHandlerInterceptor (實現接口HandlerInterceptor),IDEA編譯器,我們按ctrl+O,把需要用到的三個接口都拉出來,然後開始編寫:

/**
 * 攔截器,登錄檢查
 */

public class LoginHandlerInterceptor implements HandlerInterceptor {
    // 目標方法執行之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("loginUser");
        // 如果獲取的request的session中的loginUser參數爲空(未登錄),就返回登錄頁,否則放行訪問
        if (user == null) {
            // 未登錄,給出錯誤信息,
            request.setAttribute("msg","無權限請先登錄");
            // 獲取request返回頁面到登錄頁
            request.getRequestDispatcher("/index.html").forward(request, response);
            return false;
        } else {
            // 已登錄,放行
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

 

2. 上邊配置的session需要取值才能做判斷,那麼我們需要在controller中設置這個session值,以讓它生效:

3. 之前說過,要讓登錄有個攔截器的功能,就是除了訪問首頁我們可以,其他未登錄的都攔截下來,所以,需要在MyMvcConfig中添加一個攔截器,讓上邊的配置都有作用:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {


// 註冊攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 添加攔截的請求,並排除幾個不攔截的請求
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/index.html", "/", "/user/login");
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章