久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

springboot攔截器Interceptor的使用,你都了解嗎

瀏覽:127日期:2023-02-24 08:26:09

springmvc 中的攔截器可以對(duì)請(qǐng)求進(jìn)行判別, 在請(qǐng)求到達(dá)控制器之前, 把非法的請(qǐng)求給攔截掉下面來(lái)說(shuō)一說(shuō), 它在springboot中的使用

攔截器是可以有多個(gè)的, 對(duì)不同的 url 進(jìn)行攔截我們這個(gè)例子設(shè)想的是, 如果用戶登錄過(guò), 就會(huì)用戶設(shè)置一個(gè) session , 如果session中 有user 的信息,就說(shuō)明用戶是登錄過(guò)的

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 {//如果用戶登錄過(guò)才可以訪問(wèn)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 中去 寫(xiě) interceptors > interceptor > bean class=“攔截器的全類名”但是在 springboot中, 我們不用這樣寫(xiě)了, 我們可以使用 配置類的方式去完成

所以我們新建一個(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;@Configurationpublic 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的注冊(cè)器類,使用 addInterceptor(new XXXInterceptor) 來(lái)把這個(gè)攔截器類注冊(cè)好, addPathPatterns('/user/**') 這個(gè)方法是被重構(gòu)過(guò)的, 可以接受多個(gè)字符串參數(shù), 也可以接受一個(gè)list的集合, 也就是匹配的 url , excludePathPatterns() 也是重構(gòu)過(guò)的, 表示哪些 url 是排除的, 也就是不經(jīng)過(guò)這個(gè)攔截器

上面的攔截器和注冊(cè)都完成了, 我們就可以在控制器中寫(xiě)幾個(gè)方法測(cè)試了

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)到用戶登錄的頁(yè)面'; } @RequestMapping(value='/gomain') @ResponseBody public String goMain(){return '這是用戶進(jìn)入后的頁(yè)面'; } @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'; }}

在用戶沒(méi)有請(qǐng)求過(guò) /user/setsession的時(shí)候,如果用戶請(qǐng)求了 /user/gomain 攔截器就會(huì)發(fā)揮作用, 把它跳轉(zhuǎn)到/user/login的接口上去,如果用戶請(qǐng)求過(guò)/user/setsession的話, 再去請(qǐng)求/user/gomain 攔截器就會(huì)放行, 請(qǐng)求到相應(yīng)的結(jié)果

到此這篇關(guān)于springboot攔截器Interceptor的使用的文章就介紹到這了,更多相關(guān)springboot攔截器Interceptor內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 墨玉县| 和平县| 平乐县| 长沙县| 班玛县| 保康县| 延川县| 小金县| 周口市| 辽阳市| 尼勒克县| 宕昌县| 南江县| 开平市| 公主岭市| 汾阳市| 金华市| 特克斯县| 老河口市| 临泽县| 林甸县| 巴东县| 济源市| 平昌县| 惠水县| 思南县| 剑川县| 临桂县| 荆门市| 分宜县| 乐安县| 枣阳市| 同江市| 西盟| 麦盖提县| 章丘市| 红桥区| 西宁市| 武义县| 宁南县| 涿鹿县|