springboot攔截器Interceptor的使用,你都了解嗎
springmvc 中的攔截器可以對(duì)請(qǐng)求進(jìn)行判別, 在請(qǐng)求到達(dá)控制器之前, 把非法的請(qǐng)求給攔截掉
下面來說一說, 它在springboot中的使用
攔截器是可以有多個(gè)的, 對(duì)不同的 url 進(jìn)行攔截
我們這個(gè)例子設(shè)想的是, 如果用戶登錄過, 就會(huì)用戶設(shè)置一個(gè) session , 如果session中 有user 的信息,就說明用戶是登錄過的
1.我們先創(chuàng)建一個(gè) User 的實(shí)例對(duì)象 domain
public class User { private Integer id; private String name; private Integer age; public User() { } public User(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
2.創(chuàng)建一個(gè)攔截器 LoginInterceptor 實(shí)現(xiàn) HandlerInterceptor 接口,并實(shí)現(xiàn)其方法, 主要是 preHandle方法,其它的可以不用管
package com.huang.interceptor; import com.huang.domain.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果用戶登錄過才可以訪問 HttpSession session = request.getSession(); User user = (User)session.getAttribute("user"); if(user == null){ response.sendRedirect(request.getContextPath()+"/user/login"); return false; }else{ return true; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
在我們的springmvc項(xiàng)目中, 創(chuàng)建好攔截器, 下一步就是要在 springmvc的配置文件xml 中去 寫 interceptors > interceptor > bean class=“攔截器的全類名”
但是在 springboot中, 我們不用這樣寫了, 我們可以使用 配置類的方式去完成
所以我們新建一個(gè)配置類 InterceptorConfig 去實(shí)現(xiàn) WebMvcConfigurer 接口
package com.huang.configure; import com.huang.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**").excludePathPatterns("/user/login","/user/logout","/user/setsession"); } }
注意 我們要使用一個(gè)注解 @Configuration 表示這是一個(gè)配置類, springboot 在啟動(dòng)的時(shí)候會(huì)自動(dòng)掃瞄這個(gè)類
上面的代碼可以看出, InterceptorRegistry 是一個(gè) interceptor的注冊器類,使用 addInterceptor(new XXXInterceptor) 來把這個(gè)攔截器類注冊好, addPathPatterns("/user/**") 這個(gè)方法是被重構(gòu)過的, 可以接受多個(gè)字符串參數(shù), 也可以接受一個(gè)list的集合, 也就是匹配的 url , excludePathPatterns() 也是重構(gòu)過的, 表示哪些 url 是排除的, 也就是不經(jīng)過這個(gè)攔截器
上面的攔截器和注冊都完成了, 我們就可以在控制器中寫幾個(gè)方法測試了
package com.huang.controller; import com.huang.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller @RequestMapping(value="/user") public class UserController { @RequestMapping(value="/login") @ResponseBody public String userlogin(){ return "跳轉(zhuǎn)到用戶登錄的頁面"; } @RequestMapping(value="/gomain") @ResponseBody public String goMain(){ return "這是用戶進(jìn)入后的頁面"; } @RequestMapping(value="/logout") @ResponseBody public String logout(){ return "這是用戶登出界面"; } @RequestMapping(value="/setsession") @ResponseBody public Object setSession(HttpServletRequest request){ HttpSession session = request.getSession(); session.setAttribute("user",new User(1,"huang",20)); return "OK"; } }
在用戶沒有請(qǐng)求過 /user/setsession的時(shí)候,如果用戶請(qǐng)求了 /user/gomain 攔截器就會(huì)發(fā)揮作用, 把它跳轉(zhuǎn)到/user/login的接口上去,如果用戶請(qǐng)求過/user/setsession的話, 再去請(qǐng)求/user/gomain 攔截器就會(huì)放行, 請(qǐng)求到相應(yīng)的結(jié)果
到此這篇關(guān)于springboot攔截器Interceptor的使用的文章就介紹到這了,更多相關(guān)springboot攔截器Interceptor內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-Plus的條件構(gòu)造器QueryWrapper & UpdateWrapper示例詳解
Mybatis-Plus的條件構(gòu)造器QueryWrapper和UpdateWrapper為開發(fā)者提供了強(qiáng)大、靈活的條件構(gòu)建工具,能夠大大簡化數(shù)據(jù)庫操作的代碼,通過本文的介紹,讀者可以更加深入地理解這兩個(gè)條件構(gòu)造器的使用方法,并在實(shí)際項(xiàng)目中靈活應(yīng)用,感興趣的朋友跟隨小編一起看看吧2024-01-01Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令
這篇文章主要介紹了Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令的相關(guān)資料,需要的朋友可以參考下2016-03-03Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(4)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07java錯(cuò)誤:無效的源發(fā)行版:18解決辦法圖文詳解
在Java開發(fā)中,如果你遇到錯(cuò)誤: 無效的源發(fā)行版,這通常意味著你正在使用的Java編譯器(通常是javac)被配置為編譯一個(gè)比你的JDK 版本更高,這篇文章主要給大家介紹了關(guān)于java錯(cuò)誤:無效的源發(fā)行版:18的解決辦法,需要的朋友可以參考下2024-08-08

SpringBoot設(shè)置Json返回字段為非空問題