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

Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼

 更新時(shí)間:2023年07月14日 16:35:47   作者:Zayn~  
本文主要介紹了Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么是攔截器?

攔截器(Interceptor)類似于Servlet中的過濾器,主要用于攔截用戶請(qǐng)求并做出相應(yīng)的處理,例如攔截器可以進(jìn)行權(quán)限驗(yàn)證、記錄請(qǐng)求信息的日志、判斷用戶是否登錄等。攔截器允許自定義預(yù)處理(Pre-Processing),在其中可以選擇禁止對(duì)應(yīng)Handler 的執(zhí)行;也允許自定義后處理(Post-Precessing);?

怎樣實(shí)現(xiàn)Spring攔截器?

實(shí)現(xiàn)Spring攔截器很簡(jiǎn)單,只需要實(shí)現(xiàn)HandlerInterceptor接口即可。HandlerInterceptor這個(gè)接口中有三個(gè)核心方法:

1.preHandle方法:在HandlerMapping確定Handler對(duì)象之后,但在HandlerAdapter調(diào)用handler之前執(zhí)行(就是在調(diào)用controller之前執(zhí)行該方法)。該方法返回一個(gè)布爾值,只有true的時(shí)候才繼續(xù)執(zhí)行對(duì)應(yīng)的handler,否則不再執(zhí)行對(duì)應(yīng)的handler了。

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        return true;
    }

2.postHandle方法:在 HandlerAdapter 實(shí)際調(diào)用處理程序之后,但在 DispatcherServlet 呈現(xiàn)視圖之前調(diào)用(就是在響應(yīng)返回客戶端之前執(zhí)行)。

default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}

3.afterCompletion方法:請(qǐng)求處理完成后回調(diào),即渲染視圖后。將在處理程序執(zhí)行的任何結(jié)果上被調(diào)用,從而允許適當(dāng)?shù)馁Y源清理。注意:只有當(dāng)這個(gè)攔截器的 preHandle 方法成功完成并返回 true 時(shí)才會(huì)被調(diào)用!與 postHandle 方法一樣,該方法將以相反的順序在鏈中的每個(gè)攔截器上調(diào)用,因此第一個(gè)攔截器將是最后一個(gè)被調(diào)用的。

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}

關(guān)于上述三個(gè)核心方法調(diào)用的順序,在此我們假設(shè)有是三個(gè)攔截器,Interceptor1 、Interceptor2、和Interceptor3。在定義三個(gè)攔截器的時(shí)候我們就是按照這個(gè)順序定義的,而攔截器的執(zhí)行順序就是按照之前定義的順序執(zhí)行。

Interceptor1的preHandle方法 -> Interceptor2的preHandle方法 -> Interceptor3的preHandle方法 -> controller ->Interceptor3 的postHandle方法 -> Interceptor2 的postHandle方法 -> Interceptor1 的postHandle方法 -> Interceptor3 的afterCompletion方法 -> Interceptor2 的afterCompletion方法 ->Interceptor1 的afterCompletion方法。如圖:

如何使用Spring攔截器鑒權(quán)?

通過上述對(duì)三個(gè)核心方法的解釋可知,如果我們想通過攔截器實(shí)現(xiàn)鑒權(quán),那么只需要實(shí)現(xiàn)接口后,在preHandle方法中做相應(yīng)的處理即可。如下:

public class SecurityInterceptor implements HandlerInterceptor {
    @Autowired
    private JddPmsHelper jddPmsHelper;
    @Value("${global.authTest}")
    private String authTest;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //測(cè)試環(huán)境不校驗(yàn)權(quán)限,需預(yù)發(fā)驗(yàn)證
        if ("true".equals(authTest)) {
            return true;
        }
        String uri = request.getRequestURI();
        if (uri.contains("static")) {
            return true;
        }
        String pin = ServletUtils.getCommonPin();
        if (StringUtils.isBlank(pin)) {
            throw new NoLoginException("未登陸");
        }
        if (uri.equals("/")) {
            return true;
        }
        boolean checkResult = jddPmsHelper.authCheckUrl(pin, uri);
        if (!checkResult) {
            throw new NoneSecurityException("您沒有權(quán)限訪問,請(qǐng)聯(lián)系管理員,對(duì)您的erp賬號(hào)進(jìn)行配置");
        }
        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 {
    }
}

在實(shí)現(xiàn)HandlerInterceptor接口之后,可以通過

1、攔截器注冊(cè):實(shí)現(xiàn)WebMvcConfigurer的addInterceptors注冊(cè)。

/**
 * 攔截器注冊(cè) WebConfig
 *
 */
@Configuration
@Slf4j
public class WebConfig implements WebMvcConfigurer {
    /**
     * 登錄/權(quán)限攔截器
     */
    @Resource
    private CombinedLoginInterceptor combinedLoginInterceptor;
    /**
     * 控制層切面處理
     * ControllerExceptionHandler
     */
    @Resource
    private ControllerExceptionResolver controllerExceptionResolver;
    /**
     *
     */
    private static final String MATCH_ALL = "/**";
    /**
     * 免驗(yàn)證
     */
    private static final String APP_EXCLUDE = "/common/info";
    /**
     * 異常頁(yè)
     */
    private static final String ERROR_URL = "/error";
    /**
     * 無(wú)需權(quán)限驗(yàn)證的URI集合
     */
    private static final String[] PC_WHITE_LIST = {APP_EXCLUDE, ERROR_URL};
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //PC端登錄攔截,必須添加
        registry.addInterceptor(combinedLoginInterceptor).addPathPatterns(MATCH_ALL).excludePathPatterns(PC_WHITE_LIST).order(1);
    }
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(controllerExceptionResolver);
    }
}

2、通過XML文件注冊(cè)

    <!-- 單點(diǎn)登錄攔截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.xxx.intercepter.SecurityInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

除了使用攔截器鑒權(quán),還可以有哪幾種方式?

1、傳統(tǒng)AOP方式:在Controller方法前添加切點(diǎn),然后再對(duì)切點(diǎn)進(jìn)行處理即可。

2、過濾器:其實(shí)現(xiàn)相對(duì)簡(jiǎn)單,只需要實(shí)現(xiàn)Filter接口即可。

詳細(xì)實(shí)現(xiàn)可以參考這篇文章: SpringBoot 項(xiàng)目鑒權(quán)的 4 種方式

到此這篇關(guān)于Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼的文章就介紹到這了,更多相關(guān)Spring攔截器鑒權(quán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kotlin中的抽象類實(shí)現(xiàn)

    Kotlin中的抽象類實(shí)現(xiàn)

    這篇文章主要介紹了Kotlin中的抽象類實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 使用SpringBoot代碼詳細(xì)解釋<List>的用法

    使用SpringBoot代碼詳細(xì)解釋<List>的用法

    List是Java集合框架中的一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一組有序的元素,使用List可以方便地向其中添加、刪除或者修改元素,也可以通過下標(biāo)或者迭代器遍歷其中的元素,這篇文章主要介紹了用SpringBoot代碼詳細(xì)解釋<List>的用法,需要的朋友可以參考下
    2023-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)與面試題匯總

    Java數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)與面試題匯總

    由于順序表的插入刪除操作需要移動(dòng)大量的元素,影響了運(yùn)行效率,因此引入了線性表的鏈?zhǔn)酱鎯?chǔ)——單鏈表。本文為大家介紹了單鏈表的實(shí)現(xiàn)與面試題匯總,感興趣的可以了解一下
    2022-10-10
  • JavaWeb案例講解Servlet常用對(duì)象

    JavaWeb案例講解Servlet常用對(duì)象

    Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層
    2021-10-10
  • SpringBoot集成WebServlet出現(xiàn)自定義servlet請(qǐng)求失敗的問題解決方案

    SpringBoot集成WebServlet出現(xiàn)自定義servlet請(qǐng)求失敗的問題解決方案

    SpringBoot中以Bean方式注冊(cè)Servlet時(shí)遇到的問題,通過了解DispatcherServlet的原理,發(fā)現(xiàn)默認(rèn)路徑?jīng)_突是主要原因,本文介紹SpringBoot集成WebServlet出現(xiàn)自定義servlet請(qǐng)求失敗的問題解決方案,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot快速遷移至Quarkus的方法步驟

    SpringBoot快速遷移至Quarkus的方法步驟

    這篇文章主要介紹了SpringBoot快速遷移至Quarkus的方法步驟。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java程序如何啟動(dòng)新的進(jìn)程

    java程序如何啟動(dòng)新的進(jìn)程

    這篇文章主要介紹了java程序如何啟動(dòng)新的進(jìn)程問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 使用SpringBoot+AOP實(shí)現(xiàn)可插拔式日志的示例代碼

    使用SpringBoot+AOP實(shí)現(xiàn)可插拔式日志的示例代碼

    這篇文章主要介紹了使用SpringBoot+AOP實(shí)現(xiàn)可插拔式日志的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 基于StringBuilder類中的重要方法(介紹)

    基于StringBuilder類中的重要方法(介紹)

    下面小編就為大家?guī)?lái)一篇基于StringBuilder類中的重要方法(介紹)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-07-07
  • Druid核心源碼解析DruidDataSource

    Druid核心源碼解析DruidDataSource

    這篇文章主要為大家介紹了Druid核心源碼解析DruidDataSource,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

龙江县| 福安市| 淮安市| 揭东县| 河西区| 津南区| 定西市| 新晃| 玛沁县| 喀什市| 彭阳县| 满洲里市| 滁州市| 永春县| 普兰店市| 洪洞县| 专栏| 科尔| 五指山市| 邹平县| 嫩江县| 同心县| 潜山县| 专栏| 汉川市| 双辽市| 吉林省| 九龙县| 黎平县| 梁山县| 秀山| 蒙城县| 会理县| 满洲里市| 江门市| 富川| 靖安县| 双柏县| 仙居县| 恩平市| 遵义县|