在web開發的過程中,為了實現登錄權限驗證,我們往往需要添加一個攔截器在用戶的的請求到達controller層的時候實現登錄驗證,那么SpringBoot如何添加攔截器呢?
步驟如下:
1.繼承WebMvcConfigureAdapter類,覆蓋其addInterceptors接口,注冊我們自定義的攔截器:
/** * * 注冊攔截器 * Created by SYSTEM on 2017/8/16. */ public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { //注冊自定義攔截器,添加攔截路徑和排除攔截路徑 registry.addInterceptor(new InterceptorConfig()).addPathPatterns("api/path/**").excludePathPatterns("api/path/login"); } }
2.實現HandlerInterceptor接口,重寫接口中的三個方法:
public class InterceptorConfig implements HandlerInterceptor{ private static final Logger log = LoggerFactory.getLogger(InterceptorConfig.class); /** * 進入controller層之前攔截請求 * @param httpServletRequest * @param httpServletResponse * @param o * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { log.info("---------------------開始進入請求地址攔截----------------------------"); HttpSession session = httpServletRequest.getSession(); if(!StringUtils.isEmpty(session.getAttribute("userName"))){ return true; } else{ PrintWriter printWriter = httpServletResponse.getWriter(); printWriter.write("{code:0,message:\"session is invalid,please login again!\"}"); return false; } } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { log.info("--------------處理請求完成后視圖渲染之前的處理操作---------------"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { log.info("---------------視圖渲染之后的操作-------------------------0"); } }
這樣我們就可以在用戶請求到達controller層實現登錄攔截了,所有用戶請求都會被攔截,在prehandle方法進行登錄判斷,返回true則驗證通過,否則失敗