在我們日常開發的過程中,經常會遇到這一類問題,要求需要用戶登錄以后才能夠訪問其他的內容,否則不行,那么解決這一問題最好的辦法就是運用攔截器,攔截器可以和多種處理請求的web框架結合,今天所講的就是與springboot的結合,那么代碼搞起來,請往下看:
攔截器的實現其實主要有兩部分組成;1 是編寫自定義的攔截器,2是將自定義的攔截器加入的web中就可以工作了
先看寫的自定義額攔截器
package com.gateway.Interceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import com.gateway.entity.User;@Component//很關鍵,必不可少,少了就加載不進去webMvcConfig public class gatewayInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("進入controller層之前調用攔截器的方法");String path = request.getContextPath();String URI=request.getRequestURI();System.out.println(URI);String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/" ; User user=(User)request.getSession().getAttribute("user");if(user==null&&!URI.equals("/user/login")){//這里需要注意將一個活的頁面留出來,就是不滿足條件的都去哪,將那個路徑給留出來,否則會陷入死循環response.sendRedirect(basePath +"user/login");return false;}//這里我將Cookie省略了,若你感興趣可以自己試一試,注意cookie中不能存對象哦return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("controller層方法執行完畢之后視圖渲染之前調用的攔截器的方法");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("進行視圖渲染之后調用的攔截器的方法,用于資源清理");}}
?
下面將自定義的攔截器加入到web中
package com.gateway.website.interceptor;import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import javax.annotation.Resource;/*** 向mvc中添加自定義組件*/ @Component public class WebMvcConfig extends WebMvcConfigurerAdapter {@Resourceprivate BaseInterceptor baseInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(baseInterceptor);//這里也可以使用構造方法,new一個}/*** 添加靜態資源文件,外部可以直接訪問地址* @param registry*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {super.addResourceHandlers(registry);} }
這樣一個簡單的攔截器就問世了!