最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java SpringBoot 使用攔截器作為權(quán)限控制的實(shí)現(xiàn)方法

 更新時(shí)間:2021年10月13日 08:28:40   作者:New_HackerHK  
這篇文章主要介紹了Java SpringBoot 使用攔截器作為權(quán)限控制的實(shí)現(xiàn),文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

如何實(shí)現(xiàn)

首先攔截器是屬于web這塊的,那我們需要引入springboot web模塊,具體版本在parent中

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后我們?cè)赾onfig目錄下新建interceptor目錄,用來(lái)放攔截器

  • 我們新建兩個(gè)攔截器,一個(gè)用來(lái)登陸攔截,一個(gè)用來(lái)進(jìn)行管理員攔截。
  • 登陸攔截不必多說(shuō),就是判斷除登陸請(qǐng)求外所有請(qǐng)求是否登陸過(guò),沒(méi)有我們就截?cái)嗾?qǐng)求,然會(huì)返回失敗狀態(tài)
  • 管理員攔截,攔截的是管理員才能訪問(wèn)的資源,比如用戶管理/權(quán)限管理等,它是登陸攔截放行后才能進(jìn)行的,
  • 就像關(guān)卡是一關(guān)一關(guān)的。登陸驗(yàn)證后進(jìn)入管理員驗(yàn)證,判斷該登陸用戶是否具有管理員權(quán)限,若擁有則放行,否則攔截并返回失敗狀態(tài)
  • 攔截器的核心是實(shí)現(xiàn) org.springframework.web.servlet.HandlerInterceptor 接口,驗(yàn)證邏輯一般寫(xiě)在 preHandle 方法中,在請(qǐng)求資源前
  • 我的驗(yàn)證邏輯比較簡(jiǎn)單,登陸驗(yàn)證就是從session中取出用戶信息,判斷是否存在,用戶信息是登陸成功時(shí)放入session中的,大家也可以使用JWT驗(yàn)證
  • 管理員驗(yàn)證也是從session中取出管理員信息,判斷是否是管理員,管理員信息是登陸成功時(shí)將是否是管理員的信息放入session中的,大家也可以使用JWT驗(yàn)證

登陸攔截器

package com.example.interceptor_demo.config.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
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;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
/**
 * 攔截器,登錄檢查
 */
@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Autowired
    private HttpSession session;

    @Autowired
    private ObjectMapper objectMapper;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Object user = session.getAttribute("sessionUser");
        if (sessionUser!=null){
            return true;
        }else {
            Map<String,Object> notLogin = new HashMap<>();
            notLogin.put("msg","not login");
            notLogin.put("code",403);
            notLogin.put("data",null);
            try(PrintWriter printWriter = response.getWriter()){
                printWriter.print(objectMapper.writeValueAsString(notLogin));
            }catch (Exception e){
                e.printStackTrace();
            }
            return false;
        }
    }


    @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 {
    }

}

管理員攔截器

package com.example.interceptor_demo.config.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
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;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
/**
 * 攔截器,管理員驗(yàn)證
 */
@Component
public class AdminInterceptor implements HandlerInterceptor {

    @Autowired
    private HttpSession session;

    @Autowired
    private ObjectMapper objectMapper;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Boolean isAdmin = (Boolean)session.getAttribute("sessionAdmin");
        if (isAdmin!=null && isAdmin){
            return true;
        }else {
            Map<String,Object> notLogin = new HashMap<>();
            notLogin.put("msg","no power");
            notLogin.put("code",403);
            notLogin.put("data",null);
            try(PrintWriter printWriter = response.getWriter()){
                printWriter.print(objectMapper.writeValueAsString(notLogin));
            }catch (Exception e){
                e.printStackTrace();
            }
            return false;
        }
    }


    @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 {
    }

}

最后我們?cè)赾onfig目錄下新建WebMvcConfig類,用來(lái)注冊(cè)攔截器

  • 攔截器注冊(cè)類的核心是實(shí)現(xiàn) org.springframework.web.servlet.config.annotation.WebMvcConfigurer 接口
  • 實(shí)現(xiàn) addInterceptors 方法,參數(shù) registry 對(duì)象可用來(lái)注冊(cè)攔截器
  • registry.addInterceptor() 方法用來(lái)添加攔截器
  • .addPathPatterns() 方法是為該攔截器添加攔截資源路徑
  • .excludePathPatterns() 方法是為該攔截器添加要放行的資源路徑
  • 其中 * 代表路徑下任意名稱,** 代表任意路徑下任意名稱
package com.example.interceptor_demo.config;

import com.example.interceptor_demo.config.interceptor.AdminInterceptor;
import com.example.interceptor_demo.config.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
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 WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Autowired
    private AdminInterceptor adminInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        this.loginInterceptor(registry);//登錄攔截        
        this.adminInterceptor(registry);//管理員攔截
    }

    private void loginInterceptor(InterceptorRegistry registry){
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns(//釋放登陸接口
                        "/login/**"
                );
    }

    private void adminInterceptor(InterceptorRegistry registry){
        registry.addInterceptor(htmlPageInterceptor)
                .addPathPatterns("/admin/**");//攔截管理員接口
    }
}

到此這篇關(guān)于Java SpringBoot 使用攔截器作為權(quán)限控制的文章就介紹到這了,更多相關(guān)Java SpringBoot攔截器權(quán)限控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java配置JDK開(kāi)發(fā)環(huán)境及環(huán)境變量

    Java配置JDK開(kāi)發(fā)環(huán)境及環(huán)境變量

    這篇文章主要為大家詳細(xì)介紹了Java配置JDK開(kāi)發(fā)環(huán)境及環(huán)境變量,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java實(shí)現(xiàn)簡(jiǎn)單的拼圖游戲

    java實(shí)現(xiàn)簡(jiǎn)單的拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法

    POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法

    這篇文章主要為大家詳細(xì)介紹了POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java設(shè)計(jì)模式之建造者模式的示例詳解

    Java設(shè)計(jì)模式之建造者模式的示例詳解

    建造者模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。本文將通過(guò)示例講解建造者模式,需要的可以參考一下
    2022-02-02
  • SpringBoot中如何解決讀取properties文件讀取問(wèn)題

    SpringBoot中如何解決讀取properties文件讀取問(wèn)題

    這篇文章主要介紹了SpringBoot中如何解決讀取properties文件讀取問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 重新認(rèn)識(shí)Java的System.in

    重新認(rèn)識(shí)Java的System.in

    今天小編就為大家分享一篇關(guān)于重新認(rèn)識(shí)Java的System.in,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • log4j的Appenders配置方法

    log4j的Appenders配置方法

    下面小編就為大家?guī)?lái)一篇log4j的Appenders配置方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Spring?Data?JPA框架的核心概念與Repository接口詳解

    Spring?Data?JPA框架的核心概念與Repository接口詳解

    Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開(kāi)發(fā)者?極簡(jiǎn)的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作,本篇我們來(lái)了解Spring?Data?JPA框架的核心概念與Repository接口
    2022-04-04
  • 基于MyBatis XML配置方法(全面了解)

    基于MyBatis XML配置方法(全面了解)

    下面小編就為大家?guī)?lái)一篇基于MyBatis XML配置方法(全面了解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • IDEA實(shí)現(xiàn)Maven項(xiàng)目創(chuàng)建并連接Tomcat方式

    IDEA實(shí)現(xiàn)Maven項(xiàng)目創(chuàng)建并連接Tomcat方式

    Maven是一款由Apache開(kāi)發(fā)的項(xiàng)目管理工具,主要用于Java項(xiàng)目的構(gòu)建和依賴管理,它通過(guò)pom.xml文件自動(dòng)管理項(xiàng)目依賴的jar包,簡(jiǎn)化了項(xiàng)目構(gòu)建過(guò)程,Maven支持項(xiàng)目從編寫(xiě)源代碼到編譯、測(cè)試、打包、部署的全過(guò)程管理,其依賴管理功能免去了手動(dòng)添加jar包的麻煩
    2024-10-10

最新評(píng)論

灌云县| 洞头县| 武乡县| 乐安县| 苍山县| 普定县| 墨脱县| 温州市| 石泉县| 彩票| 长武县| 科技| 施甸县| 揭东县| 珠海市| 安义县| 玛沁县| 汝南县| 梨树县| 玉门市| 大渡口区| 梁山县| 博客| 漳州市| 安溪县| 宁津县| 丁青县| 新密市| 子长县| 贡山| 香河县| 吉首市| 密云县| 彭阳县| 随州市| 水城县| 连平县| 射阳县| 夏邑县| 泗洪县| 洞头县|