零基礎入門SpringMVC攔截器的配置與使用
在SpringMVC中 我們說到了攔截器 , 它會在映射處理器(HandleMapping)執(zhí)行時檢查我們
訪問的地址是否配置攔截器 , 在攔截器中實現(xiàn)一些功能

SpringMVC 定義了攔截器接口 HandlerInterceptor該接口中定義了三個方法,這三個方法的調用時在 SpringMVC 框架內部完成的, 調用這個三個方法的時候,其參數(shù)的值也是從框架內部傳遞進來的。
首先我們來看第一個方法 : boolean preHandle()
預處理方法,實現(xiàn)處理器(Controller層, 控制器)方法的預處理,就是在處理器方法執(zhí)行之前這個方法會被行,相當于攔截了處理器方法,框架會傳遞請求和響應對象給該方法,第三個參數(shù)為被攔截的處理器方法。如果 preHandle 方法返回 true 表示繼續(xù)流程(如調用下一個攔截器或處理器方法),返回 false 表示流程中斷,不會繼續(xù)調用其他的攔截器或處理器方法,此時我們需要通過 response 來產生響應;
意思就是說呢 , 當請求到達我們控制層方法時, 會先進入這個方法中, 根據preHandle() 方法的
返回結果(true 和 false) 來決定下一步如何執(zhí)行
后兩個方法 : void postHandle() afterCompletion()
首先第一個方法是控制層方法執(zhí)行后會執(zhí)行, 第二個方法時整個請求結束后執(zhí)行, 因為版本原因, 這兩個方法的使用頻率較低, 所以這里我們做一個了解即可
接著我們去搭建一個攔截器看看到底是怎么一回事
//自己編寫一個類PreInterceptor 實現(xiàn) HandlerInterceptor接口 , 重寫preHandle方法
public class PreInterceptor implements HandlerInterceptor {
//此方法返回true ,請求才能順利到達相應的處理方法中,否則會被攔截
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//第三個參數(shù)為目標控制器對象
HttpSession session= request.getSession();
//判斷信息是否有效
Admin admin = (Admin) session.getAttribute("admin");
if (admin==null){
response.getWriter().print(202);
return false;
}else {
return true;
}
}
}接著需要去配置文件中配置攔截器
<!--配置攔截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--所有請求都進入攔截器-->
<mvc:mapping path="/**"/>
<!--指定哪些請求不進入攔截器-->
<mvc:exclude-mapping path="/login/login"/>
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/images/**"/>
<mvc:exclude-mapping path="/js/**"/>
<mvc:exclude-mapping path="/**.html"/>
<!--攔截器實現(xiàn)類-->
<bean id="login" class="com.ff.ssm.util.PreInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>這里我們以后端登錄 的控制器為例
@RestController
@RequestMapping(value = "/login")
public class LoginController {
@Autowired
LoginService loginService;
@PostMapping(value = "/login")
public CommonResult adminLogin(Admin admin, HttpSession session){
CommonResult commonResult;
try {
Admin admin1 = loginService.login(admin);
if(admin1==null){
commonResult=new CommonResult(201,"賬號或密碼錯誤",admin1);
}else {
session.setAttribute("admin",admin1);
commonResult=new CommonResult(200,"登錄成功",admin1);
}
}catch (Exception e){
commonResult=new CommonResult(500,"登錄失敗","");
}
return commonResult;
}
}如上, 前端發(fā)起了登錄請求 , 我們配置了攔截器, 會先進入攔截器 , 根據 preHandle() 方法決定
是否可以進入到我們具體的登錄方法中
上述控制器例子是將用戶的信息存入了session中 , 我們每次接受前端的請求時, 在攔截器中判斷用戶的信息是否還是有效的 , 有效則放行, 無效則攔截 , 所以前提是我們的登錄請求肯定是不能被攔截的, 因為這時候沒有登錄, 用戶信息為 null ,所以上面我們配置了不攔截登錄請求, 也不去攔截那些請求頁面
以上就是SpringMVC中攔截器的具體功能和實現(xiàn) , 感謝閱讀
到此這篇關于零基礎入門SpringMVC攔截器的配置與使用的文章就介紹到這了,更多相關SpringMVC攔截器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Maven項目部署到Jboss出現(xiàn)Failed to create a new SAX parser
這篇文章主要為大家詳細介紹了Maven項目部署到Jboss出現(xiàn)Failed to create a new SAX parser的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
idea配置tomcat,idea配置web下lib的包詳解
這篇文章主要介紹了idea配置tomcat,idea配置web下lib的包,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
spring?NamedContextFactory在Fegin配置及使用詳解
在我們日常項目中,使用FeignClient實現(xiàn)各系統(tǒng)接口調用變得更加簡單,?在各個系統(tǒng)集成過程中,難免會遇到某些系統(tǒng)的Client需要特殊的配置、返回讀取等需求。Feign使用NamedContextFactory來為每個Client模塊構造單獨的上下文(ApplicationContext)2023-11-11
Spring Boot項目中jar包在服務器上啟動的正確姿勢
這篇文章主要給大家介紹了關于Spring Boot項目中jar包在服務器上啟動的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-01-01
Java?I/O?(Input/Output)文件字節(jié)流舉例詳解
Java的輸入輸出流(IO)是用于與外部設備(如文件、網絡連接等)進行數(shù)據交互的機制,下面這篇文章主要給大家介紹了關于Java?I/O?(Input/Output)文件字節(jié)流的相關資料,需要的朋友可以參考下2024-08-08
Springboot如何基于assembly服務化實現(xiàn)打包
這篇文章主要介紹了Springboot如何基于assembly服務化實現(xiàn)打包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06

