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是逆序執行的。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态