SpringBoot自定義攔截器實現登錄驗證攔截

登錄驗證攔截是攔截器比較常用的場景之一。我們想做到對未登錄的用戶進行攔截,禁止其訪問其他頁面同時跳轉到登錄頁面,那麼就需要使用攔截器了。當然你也可以使用比較成熟的框架,比如Shiro就是比較優秀的,但是我們自己如何實現這個功能呢,下面通過配置自定義的攔截器實現,順便學習一下攔截器。

1、登錄Controller的實現

我們這裏只簡單的模擬場景。

@Controller
public class AuthController {
    @GetMapping("/login")
    public String login(){

        return "login";
    }

    @PostMapping("/login")
    public String login(String username, String password, HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute("token", "authorized");  //對於登錄的用戶在session中添加登錄標記

        return "login";
    }

}

2、配置攔截規則

由於我們用的SpringBoot版本較高,HandlerInterceptor已經實現了所有方法,所以我們這裏只實現這個訪問前的方法即可。

public class AuthInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        System.out.println("preHandle");
        HttpSession session = request.getSession();
        if ("authorized"!=session.getAttribute("token")) {  //校驗登錄標記
            request.getRequestDispatcher("/login").forward(request, response);  //對於未登錄的用戶跳轉到登錄頁面
            return false;
        }
        return true;
    }
}

3、配置WebMvcConfigurer攔截器

@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new AuthInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/login")  //過濾掉登錄頁面
            .excludePathPatterns("/static/**");  //過濾掉靜態資源
    }
}

通過上面簡單的配置一個自定義的登錄驗證的攔截器就實現了。

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