欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年07月22日 10:49:10   作者:A黃俊輝A  
springmvc 中的攔截器可以對請求進行判別,在請求到達控制器之前,把非法的請求給攔截掉下面來說一說, 它在springboot中的使用,感興趣的朋友一起看看吧

springmvc 中的攔截器可以對請求進行判別, 在請求到達控制器之前, 把非法的請求給攔截掉
下面來說一說, 它在springboot中的使用

攔截器是可以有多個的, 對不同的 url 進行攔截
我們這個例子設想的是, 如果用戶登錄過, 就會用戶設置一個 session , 如果session中 有user 的信息,就說明用戶是登錄過的

1.我們先創(chuàng)建一個 User 的實例對象 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)建一個攔截器 LoginInterceptor 實現 HandlerInterceptor 接口,并實現其方法, 主要是 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項目中, 創(chuàng)建好攔截器, 下一步就是要在 springmvc的配置文件xml 中去 寫 interceptors > interceptor > bean class=“攔截器的全類名”
但是在 springboot中, 我們不用這樣寫了, 我們可以使用 配置類的方式去完成

所以我們新建一個配置類 InterceptorConfig 去實現 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");
    }
}

注意 我們要使用一個注解 @Configuration 表示這是一個配置類, springboot 在啟動的時候會自動掃瞄這個類
上面的代碼可以看出, InterceptorRegistry 是一個 interceptor的注冊器類,使用 addInterceptor(new XXXInterceptor) 來把這個攔截器類注冊好, addPathPatterns("/user/**") 這個方法是被重構過的, 可以接受多個字符串參數, 也可以接受一個list的集合, 也就是匹配的 url , excludePathPatterns() 也是重構過的, 表示哪些 url 是排除的, 也就是不經過這個攔截器

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

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 "跳轉到用戶登錄的頁面";
    }


    @RequestMapping(value="/gomain")
    @ResponseBody
    public String goMain(){
        return "這是用戶進入后的頁面";
    }

    @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";
    }

}

在用戶沒有請求過 /user/setsession的時候,如果用戶請求了 /user/gomain 攔截器就會發(fā)揮作用, 把它跳轉到/user/login的接口上去,如果用戶請求過/user/setsession的話, 再去請求/user/gomain 攔截器就會放行, 請求到相應的結果

到此這篇關于springboot攔截器Interceptor的使用的文章就介紹到這了,更多相關springboot攔截器Interceptor內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis-Plus的條件構造器QueryWrapper & UpdateWrapper示例詳解

    Mybatis-Plus的條件構造器QueryWrapper & UpdateWrapper示例詳解

    Mybatis-Plus的條件構造器QueryWrapper和UpdateWrapper為開發(fā)者提供了強大、靈活的條件構建工具,能夠大大簡化數據庫操作的代碼,通過本文的介紹,讀者可以更加深入地理解這兩個條件構造器的使用方法,并在實際項目中靈活應用,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Java中通過jsch來連接遠程服務器執(zhí)行l(wèi)inux命令

    Java中通過jsch來連接遠程服務器執(zhí)行l(wèi)inux命令

    這篇文章主要介紹了Java中通過jsch來連接遠程服務器執(zhí)行l(wèi)inux命令的相關資料,需要的朋友可以參考下
    2016-03-03
  • Java日常練習題,每天進步一點點(4)

    Java日常練習題,每天進步一點點(4)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java ThreadLocal有什么作用你知道嗎

    Java ThreadLocal有什么作用你知道嗎

    這篇文章主要為大家詳細介紹了java ThreadLocal的作用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09
  • Springboot整合knife4j與shiro的操作

    Springboot整合knife4j與shiro的操作

    這篇文章主要介紹了Springboot整合knife4j與shiro的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java錯誤:無效的源發(fā)行版:18解決辦法圖文詳解

    java錯誤:無效的源發(fā)行版:18解決辦法圖文詳解

    在Java開發(fā)中,如果你遇到錯誤: 無效的源發(fā)行版,這通常意味著你正在使用的Java編譯器(通常是javac)被配置為編譯一個比你的JDK 版本更高,這篇文章主要給大家介紹了關于java錯誤:無效的源發(fā)行版:18的解決辦法,需要的朋友可以參考下
    2024-08-08
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    這篇文章主要介紹了Java容器ArrayList原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 詳解Kotlin中的面向對象(二)

    詳解Kotlin中的面向對象(二)

    這篇文章主要介紹了詳解Kotlin中的面向對象(二)的相關資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot設置Json返回字段為非空問題

    SpringBoot設置Json返回字段為非空問題

    這篇文章主要介紹了SpringBoot設置Json返回字段為非空問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 淺談MyBatis執(zhí)行SQL的兩種方式

    淺談MyBatis執(zhí)行SQL的兩種方式

    本文介紹MyBatis執(zhí)行SQL語句的2種方式,主要是SqlSession和Mapper接口以及它們的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2021-08-08

最新評論