servlet 攔截器,ssm 新建攔截器_攔截器在springboot項目和ssm架構項目的應用

 2023-10-05 阅读 31 评论 0

摘要:1.攔截器的主要功能在訪問某節點url前攔截客戶端發來的請求,判斷該請求是否符合自己定義的要求,如果不符合,返回false,該節點url的對應代碼不會被執行;如果符合,返回true,可以執行該節點url。2.在springboot項目中的應用方法

1.攔截器的主要功能

在訪問某節點url前攔截客戶端發來的請求,判斷該請求是否符合自己定義的要求,如果不符合,返回false,該節點url的對應代碼不會被執行;如果符合,返回true,可以執行該節點url。

2.在springboot項目中的應用方法

假設有這么一個場景:某電商網站的商品必須登陸后才能查看內容,否則無法進入商品頁,那么處理方法就是使用攔截器,具體如下:

servlet 攔截器,創建一個類,命名LoginIntercepter ,該類實現HandlerInterceptor接口,該類上加上@Component注解,加載進spring容器中

實現接口后,有三個方法需要我們處理,分別是preHandle,postHandle,afterCompletion;其中preHandle是訪問controller接口之前執行的,在這里我們要寫相關邏輯,判斷登錄狀態;postHandle調用前提是preHandle返回true,它是在controller接口方法執行完畢和DispatcherServlet進行視圖的渲染之前進行的;afterCompletion用于DispatcherServlet進行視圖的渲染之后,多用于清理資源。這里主要用preHandle方法,代碼如下:

//這個方法是在訪問接口之前執行的,我們只需要在這里寫驗證登陸狀態的業務邏輯,就可以在用戶調用指定接口之前驗證登陸狀態了

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {

Java攔截器?//每一個項目對于登陸的實現邏輯都有所區別,我這里使用最簡單的Session提取User來驗證登陸。

HttpSession session = request.getSession();

//這里的User是登陸時放入session的

String user = (String) session.getAttribute("username");

//如果session中沒有user,表示沒登陸

springboot注解。if (user ==null){

//這個方法返回false表示忽略當前請求,如果一個用戶調用了需要登陸才能使用的接口,如果他沒有登陸這里會直接忽略掉

//可以重定向到登錄接口,讓為登錄的用戶去先登錄

response.sendRedirect("/luckmoney/nongyebank");

return false;

springboot前后端分離。}else {

return true;//如果session里有user,表示該用戶已經登陸,放行,用戶即可繼續調用自己需要的接口

}

}

至于postHandle和afterCompletion可以不寫。

Springboot。下面開始配置攔截器,代碼如下:

@Configuration ? //生命配置類,該類實現WebMvcConfigurer 接口

public class WebConfigurer implements WebMvcConfigurer {

@Autowired

private LoginIntercepter? loginIntercepter;? //注入自己寫的攔截器

spring,// 這個方法是用來配置靜態資源的,比如html,js,css,等等

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

}

// 這個方法用來注冊攔截器,我們自己寫好的攔截器需要通過這里添加注冊才能生效,addPathPatterns("/**")即是添加的攔截路徑,也就是攔截controller的所有接口;.excludePathPatterns("/nongyebank","/login")即是放行的controller接口,這些接口不會被攔截,常用的登錄接口和注冊接口等不必攔截。

springboot攔截、@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginIntercepter).addPathPatterns("/**").excludePathPatterns("/nongyebank","/login");

}

}

基于springboot,這樣springboot的攔截器配置完成,這是一個登錄的攔截器,目的是防止用戶跨過登錄直接訪問其他內容。

2.在ssm架構項目中的應用方法

ssm架構項目就是spring,springmvc,mybaties的整合,這里的攔截器,主要是在xml中配置的,但是,自己也要定義一下攔截器

假設還是登錄攔截的需求,自己寫的攔截器和上一個springboot項目的一樣,只是在配置上不一樣了,springboot用的是注解形式來配置自己的攔截器,而ssm則是在xml中配置,這里是在spring-mvc.xml中配置攔截器:

配置如下

ssm springboot、這里,放行的仍然是注冊登錄和js,img等靜態資源,用標簽將自己寫的攔截器注入spring容器中,運行項目,可以發現只有放行的接口可以訪問,其他的需要在登錄后才能訪問。

這樣,攔截器在springboot項目和ssm架構項目的應用就簡單實現了。

另外:如果配置多個攔截器,preHandle方法會按照配置的順序順序執行,而postHandle和afterCompletion是逆序執行的。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/115032.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息