首先我們要先創(chuàng)建一個(gè)攔截器。先附上代碼:
@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {
//目標(biāo)方法執(zhí)行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("currentUser");
if (user == null) {
//未登錄,返回登錄頁(yè)面
response.sendRedirect("/LoginError.html");
return false;
}else {
//放行
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
}
?先創(chuàng)建一個(gè)HandlerInterceptor類(lèi)并實(shí)現(xiàn)org.springframework.web.servlet.HandlerInterceptor
這個(gè)接口中的三個(gè)方法,通過(guò)方法名就可以看出三個(gè)方法分別可在要攔截的請(qǐng)求執(zhí)行之前绢片、中嵌屎,后進(jìn)行相關(guān)的處理。本例是對(duì)攔截url進(jìn)行是否已經(jīng)登錄的攔截驗(yàn)證。注意還有一個(gè)@Component
注解不要忘記了。
?攔截時(shí)的處理方式很簡(jiǎn)單,攔截時(shí)判斷用戶是否已經(jīng)登錄撮躁,如果登錄了就放行,否則跳轉(zhuǎn)回指定頁(yè)面买雾。
然后創(chuàng)建一個(gè)Config
來(lái)注冊(cè)攔截器把曼,代碼如下:
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//所有的WebMvcConfigurerAdapter組件都會(huì)一起起作用
@Bean //將組件注冊(cè)在容器中
public WebMvcConfigurer webMvcConfigurerAdapter(){
return new WebMvcConfigurer(){
//注冊(cè)攔截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//靜態(tài)資源; *.css,*.js
//SpringBoot已經(jīng)做好了靜態(tài)資源映射
// registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
// .excludePathPatterns("/index.html","/","/user/login","/static/**","/webjars/**");
// /** 表示攔截所有路徑下的所有請(qǐng)求
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/person.html","/Person.html",
"/questionnaire.html","/Questionnaire.html",
"/result.html","/Result.html");
}
};
}
}
?@Configuration
漓穿,@Bean
注解嗤军,org.springframework.web.servlet.config.annotation.WebMvcConfigurer
接口。
?其中addInterceptor
方法用于把剛才創(chuàng)建的攔截器加入到registry中,addPathPatterns
用戶加入所要攔截的url晃危,/**
表示攔截所有請(qǐng)求叙赚。excludePathPatterns
添加不需要攔截的請(qǐng)求老客。
?至此,一個(gè)攔截器就配置好了震叮。如果需要配置多個(gè)攔截胧砰,只需要另外創(chuàng)建一個(gè)攔截器,給registry
再加一個(gè)inteceptor就可以了苇瓣,不用再創(chuàng)建一個(gè)新的config配置類(lèi)尉间。