SpringBoot 配置登錄攔截器

SpringBoot中使用攔截器

第一步:自定義一個(gè)攔截器
第二步:在配置類或者配置xml文件中注冊(cè)攔截器和指定攔截哪些路徑

1.新建登錄攔截器

新建一個(gè)intercepors包,用來裝攔截器。新建登錄攔截器LoginInterceptor.java,用來攔截驗(yàn)證登錄(就是說沒有登錄過的用戶必須先登錄才能進(jìn)入網(wǎng)站的其他頁面)
記得要加@Component注解,因?yàn)槲覀冃枰谙乱徊降腤ebAppConfig.java類中注入這個(gè)攔截器類

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("開始攔截");
        return false;
    }

    @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.新建配置類WebAppConfig.java

  1. 新建config包,用來裝初始化文件,在下面新建WebAppConfig.java
  2. 首先將LoginInterceptor.java注入到WebAppConfig.java中
  3. 然后在WebAppConfig中注冊(cè)攔截器,使其生效。
    addPathPatterns 用來設(shè)置攔截路徑,excludePathPatterns 用來設(shè)置白名單,也就是不需要觸發(fā)這個(gè)攔截器的路徑。
@Configuration
public class WebAppConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    //    這個(gè)方法是用來注冊(cè)攔截器,我們自己寫好的攔截器是需要添加注冊(cè)才能生效
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //.addPathPatterns("/**") 攔截所有請(qǐng)求
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/login");
    }

    //    這個(gè)方法是用來配置靜態(tài)資源,比如html,css,js等
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
}

3. 測(cè)試類

@RestController
public class LoginController {

    @RequestMapping("/login")
    public String login(){
        return "login success";
    }

    @RequestMapping("/home")
    public String home(){
        return "hello home";
    }
}

運(yùn)行結(jié)果,如果輸入http://localhost:8080/home,后臺(tái)會(huì)輸出“開始攔截”;如果輸入http://localhost:8080/login,不會(huì)被攔截,正常輸出"login success"

4.登錄攔截器的使用

最簡(jiǎn)單的一個(gè)登錄攔截器是通過判斷session中是否有用戶信息,當(dāng)我們第一次登錄成功后,就將自己的信息以鍵值對(duì)的形式記錄到session中,第二次登錄時(shí),判斷session中是否有用戶信息,如果有就是已經(jīng)登錄過了,如果沒有就是未登錄。


@Component
public class LoginInterceptor implements HandlerInterceptor {
 
    //這個(gè)方法是在訪問接口之前執(zhí)行的,我們只需要在這里寫驗(yàn)證登陸狀態(tài)的業(yè)務(wù)邏輯,就可以在用戶調(diào)用指定接口之前驗(yàn)證登陸狀態(tài)了
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //每一個(gè)項(xiàng)目對(duì)于登陸的實(shí)現(xiàn)邏輯都有所區(qū)別,我這里使用最簡(jiǎn)單的Session提取User來驗(yàn)證登陸。
        HttpSession session = request.getSession();
        //這里的User是登陸時(shí)放入session的
        User user = (User) session.getAttribute("user");
        //如果session中沒有user,表示沒登陸
        if (user == null){
            //這個(gè)方法返回false表示忽略當(dāng)前請(qǐng)求,如果一個(gè)用戶調(diào)用了需要登陸才能使用的接口,如果他沒有登陸這里會(huì)直接忽略掉
            //當(dāng)然你可以利用response給用戶返回一些提示信息,告訴他沒登陸
            return false;
        }else {
            return true;    //如果session里有user,表示該用戶已經(jīng)登陸,放行,用戶即可繼續(xù)調(diào)用自己需要的接口
        }
    }
 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

SSM中使用攔截器

  1. 攔截器同上
  2. 配置文件spring.xml
 <!--設(shè)置攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--攔截哪些路徑-->
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login"/>
            <!--注冊(cè)攔截器-->
            <bean class="com.msj.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容