創建攔截器類
以登錄攔截器爲例
@Component:把普通pojo實例化到spring容器中,相當於配置文件中的<bean id="" class=""/>
import com.xsj.xsj1800wsq.utils.RedisUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @ClassName LoginInterceptor2
* @Author zx
* @Date 2019/7/4 15:05
**/
@Component
public class LoginBaseInterceptor implements HandlerInterceptor {
@Resource
private RedisUtil redisUtil;
// 執行Handler方法之前執行
// 用於身份認證、身份授權
// 比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
return true;
}
// 進入Handler方法之後,返回modelAndView之前執行
// 應用場景從modelAndView出發:將公用的模型數據(比如菜單導航)在這裏
// 傳到視圖,也可以在這裏統一指定視圖
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
// 執行Handler完成執行此方法
// 應用場景:統一異常處理,統一日誌處理
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
創建@Configuration
import com.xsj.xsj1800wsq.interceptor.LoginBaseInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @ClassName WebConfig
* @Author zx
* @Date 2019/7/4 15:12
**/
@Configuration
public class WebConfig implements WebMvcConfigurer {
//不攔截這些請求
private final String[] notLoginInterceptPaths = {"/static/**","/admin/login","/error/**","/login"};
@Bean
public LoginBaseInterceptor loginBaseInterceptor(){
return new LoginBaseInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//這裏直接調用上面聲明的函數loginBaseInterceptor(),不要重新new
registry.addInterceptor(loginBaseInterceptor()).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
}
}