国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringMvc中攔截器的配置及應用

這篇具有很好參考價值的文章主要介紹了SpringMvc中攔截器的配置及應用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

攔截器原理

在 Spring MVC 中,攔截器(Interceptor)是一種機制,用于攔截請求并在處理程序(Controller)執(zhí)行之前或之后執(zhí)行一些操作。攔截器允許您在請求的不同階段(如處理程序執(zhí)行前、處理程序執(zhí)行后、視圖渲染前、視圖渲染后等)添加自定義邏輯。

SpringMvc中攔截器的配置及應用,java,spring boot,springmvc

其中問號就是攔截器處理的范圍。

實現(xiàn)自定義攔截器

@Component
public class SampleInterceptor implements HandlerInterceptor {
    // 在controller執(zhí)行前的邏輯
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在controller執(zhí)行之前執(zhí)行的邏輯
        System.out.println("Pre-handle logic");
        return true; // 返回 true,將允許請求繼續(xù)傳遞到處理程序;
        //返回 false,將阻止請求傳遞給處理程序
    }
    // 在controller執(zhí)行后、并在視圖渲染前執(zhí)行的邏輯
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
       
        System.out.println("Post-handle logic");
    }
    //在服務器響應結束后執(zhí)行的邏輯
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
   
        System.out.println("After-completion logic");
    }
}

將自定義攔截器添加到SpringMvc中

@Configuration
public class InterceptorRoll implements WebMvcConfigurer {
    @Autowired
    LoginTicketInterceptor loginTicketInterceptor;
  
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //registry.addInterceptor() 方法可以向注冊表中添加攔截器。
        InterceptorRegistration interceptorRegistration = registry.addInterceptor(loginTicketInterceptor);
        //添加攔截器生效路徑,以及攔截器忽略的路徑
        ...
        
        }
}

使用攔截器實現(xiàn)權限驗證邏輯

關鍵鑒權邏輯圖解:

SpringMvc中攔截器的配置及應用,java,spring boot,springmvc

1.在請求controller之前先經(jīng)過攔截器,從cookie中獲取用戶標識,根據(jù)用戶標識,從redis中取出登錄憑證

2.如果登錄憑證有效,則設置一個線程與用戶信息進行綁定,并將用戶信息存入到視圖模型中

3.如果憑證無效則跳轉到登錄頁面

4.在用戶請求完之后,銷毀線程與用戶名的綁定

實現(xiàn):

1.創(chuàng)建工具類ThreadHolder

package com.duhong.util;

import com.duhong.entity.User;
import org.springframework.data.redis.core.StringRedisTemplate;

public class ThreadHolder {
    static ThreadLocal<User> users=new ThreadLocal<>();

    /**
     * 設置線程信息
     * @param user
     */
    public static void setHolder(User user){
        users.set(user);
    }

    /**
     * 獲取當前線程的信息
     * @return
     */
    public static User getHolder(){
        return users.get();
    }

    /**
     * 解除線程與當前用戶的綁定
     */
    public static void remove(){
        users.remove();
    }
}

2.創(chuàng)建自定義攔截器

@Component
public class LoginTicketInterceptor implements HandlerInterceptor {
    @Autowired
    StringRedisTemplate redisTemplate;//redis客戶端
    @Autowired
    UserMapper userMapper;//根據(jù)用戶id查詢用戶所有信息

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //獲取用戶的cookie
        Cookie[] cookies = request.getCookies();
        String loginOwner=null;
        System.out.println("開始鑒權");
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("loginOwner")){
                loginOwner=cookie.getValue();
                break;
            };
        }
        LoginTicket ticket=new LoginTicket();
        //如果loginOwner不等于null,從redis中獲取登錄簽證
        if(loginOwner!=null) {
            String s = redisTemplate.opsForValue().get(RedisUtil.getTicket(loginOwner));
            ticket = RedisUtil.getObject(s);

            //用戶已被授權
            if (ticket != null && ticket.getStatus() == 1) {
                User user = userMapper.selectById(ticket.getUserId());
                //將用戶信息與當前線程綁定
                ThreadHolder.setHolder(user);
                return true;
            }
        }
        //如果簽證不等于null,而且簽證的狀態(tài)無效則跳轉到登錄頁面
        response.sendRedirect("/site/login");
        return false;
    }

    /**
     * 在視圖層渲染之前將用戶信息存入模型
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
         if(ThreadHolder.getHolder()!=null&&modelAndView!=null){
         //從當前線程中獲取用用戶信息
             modelAndView.addObject("loginUser",ThreadHolder.getHolder());
         }

     }

    /**
     * 在服務器響應完本次信息之后,解除當前線程與用戶信息的綁定
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
         ThreadHolder.remove();
     }
}

3.將攔截器加入到SpringMvc中并設置攔截規(guī)則

package com.duhong.config;

import com.duhong.filter.LoginTicketInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Arrays;
import java.util.List;

@Configuration
public class InterceptorRoll implements WebMvcConfigurer {
    @Autowired
    LoginTicketInterceptor loginTicketInterceptor;
    //配置文件中配置配置需要過濾的路徑形式為:路徑,路徑,...
    @Value("${allow.pages}")
    String allowPages;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration interceptorRegistration = registry.addInterceptor(loginTicketInterceptor);
        interceptorRegistration.addPathPatterns("/**");
        String[] split = allowPages.split(",");
        for (String allowpage : split) {
            System.out.println(allowpage);
            //忽略指定頁面
            interceptorRegistration.excludePathPatterns(allowpage);
        }
        //忽略靜態(tài)資源
        interceptorRegistration.excludePathPatterns("/css/**","/img/**","/js/**");
    }
}

如有收獲,就點個贊吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-814116.html

到了這里,關于SpringMvc中攔截器的配置及應用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • springMVC之攔截器

    springMVC之攔截器

    攔截器 SpringMVC中的攔截器用于攔截控制器方法的執(zhí)行 SpringMVC中的攔截器需要實現(xiàn)HandlerInterceptor SpringMVC的攔截器必須在SpringMVC的配置文件中進行配置: FirstIntercepor類: SecondInterceptor類: SpringMVC中的攔截器有三個抽象方法: preHandle:控制器方法執(zhí)行之前執(zhí)行preHandle(),其bool

    2024年02月10日
    瀏覽(28)
  • SpringMVC 攔截器

    SpringMVC 攔截器

    Spring MVC 攔截器是Spring框架中的一種機制,用于在請求到達處理器之前和渲染視圖之前攔截請求,并允許開發(fā)者在這兩個時間點進行自定義的處理邏輯。攔截器與過濾器(Filter)類似,但更加專注于對請求的處理器的攔截,比如對訪問權限進行控制、日志記錄、性能監(jiān)控等。

    2024年01月19日
    瀏覽(33)
  • SpringMVC:攔截器

    SpringMVC:攔截器

    一般我們會做一些統(tǒng)一的操作這個時候我們需要使用springmvc提供的攔截器,例如token的驗證,字段必填的操作,接口超時判斷,簽名驗證,字段加密等操作,所以我們需要了解執(zhí)行先后順序。?我們來簡單介紹下實現(xiàn)過程及對應代碼,執(zhí)行結果: 1、定義自己的spring mvc攔截器需

    2024年01月24日
    瀏覽(29)
  • SpringMVC攔截器 (Interceptor)

    ????????Spring MVC中的攔截器(Interceptor)類似于Servlet中的過濾器(Filter),它主要用于攔截用戶請求并作相應的處理。例如通過攔截器可以進行權限驗證、判斷用戶是否登錄等。 ????????攔截器依賴于web框架,在實現(xiàn)上基于Java的反射機制,屬于面向切面編程(AOP)的

    2024年01月22日
    瀏覽(34)
  • 12、SpringMVC之攔截器

    12、SpringMVC之攔截器

    創(chuàng)建名為spring_mvc_interceptor的新module,過程參考9.1節(jié)和9.5節(jié) 與自定義的過濾器一樣,自定義的攔截器也要配置后才能生效; 過濾器是服務器中的組件,所以配置到 web.xml 中; 攔截器是 springmvc 中的組件,因此要配置到 springmvc 的配置文件中。 因為在配置攔截器時,沒有指定要

    2024年02月05日
    瀏覽(28)
  • 一文學會 SpringMVC 攔截器

    一文學會 SpringMVC 攔截器

    ?作者簡介:2022年 博客新星 第八 。熱愛國學的Java后端開發(fā)者,修心和技術同步精進。 ??個人主頁:Java Fans的博客 ??個人信條:不遷怒,不貳過。小知識,大智慧。 ??當前專欄:SSM 框架從入門到精通 ?特色專欄:國學周更-心性養(yǎng)成之路 ??本文內容:一文學會 SpringM

    2024年02月02日
    瀏覽(26)
  • SpringMVC Day 10 : 攔截器

    SpringMVC Day 10 : 攔截器

    攔截器是Spring MVC框架提供的一種強大的機制,用于在請求到達控制器之前或之后進行預處理和后處理。它可以攔截并處理請求,對請求進行必要的修改或驗證,以及在請求返回給客戶端之前進行額外的操作。攔截器可以幫助我們實現(xiàn)各種需求,如身份驗證、日志記錄、性能監(jiān)

    2024年02月06日
    瀏覽(19)
  • springmvc統(tǒng)一異常處理攔截器

    使用@RestControllerAdvice+@ExceptionHandler實現(xiàn) 也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler實現(xiàn) 創(chuàng)建一個異常處理的類,放在config包下 ?組件類: ?也可以讓不同的異常返回不同的結果,捕獲什么異常由@ExceptionHandler的value屬性決定,傳入一個類對象(可以通過反射獲得) ?

    2024年02月15日
    瀏覽(24)
  • SpringMVC的攔截器(Interceptor)

    SpringMVC的攔截器(Interceptor)

    對于攔截器這節(jié)的知識,我們需要學習如下內容: 攔截器概念 入門案例 攔截器參數(shù) 攔截器工作流程分析 講解攔截器的概念之前,我們先看一張圖: (1)瀏覽器發(fā)送一個請求會先到Tomcat的web服務器 (2)Tomcat服務器接收到請求以后,會去判斷請求的是靜態(tài)資源還是動態(tài)資源 (3)如果是

    2024年02月09日
    瀏覽(30)
  • SpringMVC中攔截器的簡單使用

    步驟一:創(chuàng)建攔截器類 首先,我們需要創(chuàng)建一個攔截器類,該類需要實現(xiàn) HandlerInterceptor 接口。這個接口定義了三個方法,分別在請求處理前、請求處理后和視圖渲染后執(zhí)行。 步驟二:創(chuàng)建配置類 上述配置類使用了 @Configuration 注解,表示這是一個配置類。通過 @Bean 注解將

    2024年01月17日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包