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

Springboot中JWT登錄校驗(yàn)及其攔截器實(shí)現(xiàn)方法

 更新時間:2025年11月17日 11:04:19   作者:程序陸  
這篇文章主要介紹了Springboot中JWT登錄校驗(yàn)及其攔截器實(shí)現(xiàn)方法的相關(guān)資料,包括引入Maven坐標(biāo)、獲取Token、JWT攔截器的實(shí)現(xiàn)和配置,通過這些步驟可以實(shí)現(xiàn)后端對用戶登錄的身份校驗(yàn),需要的朋友可以參考下

前言

這篇我們主要實(shí)現(xiàn)后端對用戶登錄的身份校驗(yàn),是web項(xiàng)目核心功能之一。

后續(xù)會有springboot整合各個功能的文章,同時也會有前端的相關(guān)知識,希望能給web開發(fā)學(xué)習(xí)者提供幫助~

一、JWT是什么?

JWT(JSON Web Token)是一種基于 JSON 的輕量級開放標(biāo)準(zhǔn)(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用間安全地傳遞聲明信息。它通過數(shù)字簽名確保信息的完整性和真實(shí)性,常被用于身份驗(yàn)證和數(shù)據(jù)交換場景。

二、實(shí)現(xiàn)步驟

1.引入Maven坐標(biāo)

在pom.xml中引入Maven坐標(biāo):

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>

2.獲取Token

封裝一個靜態(tài)函數(shù)用來生成token。在service層用戶登錄信息匹配成功后,可以調(diào)用該函數(shù),來獲取Token,同時把Token密鑰返回給前端。

    public static String getToken(String userId, String password){

        long EXPIRE_TIME = 60 * 60 * 1000;  //過期時間 60 分鐘
        Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
        String token = JWT.create().withAudience(userId) // 將 userId 保存到 token 里面
                .withExpiresAt(date) //60分鐘后token過期
                .sign(Algorithm.HMAC256(password));  //使用用戶id和password進(jìn)行token生成
        return token;  //返回加密后的token密鑰

    }

3.JWT攔截器的實(shí)現(xiàn)

public class JwtInterceptor implements HandlerInterceptor {
    @Autowired
    private UserService userService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

        //通過預(yù)檢請求
       if(request.getMethod().equals("OPTION")){
           return true;
       }
       //從請求頭中獲取Token,xxx為前端請求頭中value為Token密鑰的key
       String token = request.getHeader("xxx");
        // 如果不是映射到方法直接通過
        if(!(handler instanceof HandlerMethod)){
            return true;
        }
        //ServiceException是自定義的異常
        if(token == null){
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }

        String userId;
        try {
            //對Token密鑰進(jìn)行解密,獲取用戶id
            userId = JWT.decode(token).getAudience().get(0);
        } catch (JWTDecodeException j) {
            //Token密鑰有誤,無法解密
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }

        //通過解密后獲取的用戶id進(jìn)行數(shù)據(jù)庫查詢,判斷是否有該id的用戶
        User user = userService.getUser(userId);
        if (user == null) {
            //沒有該用戶
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }
        //獲取從數(shù)據(jù)庫查詢出來的用戶密碼,對前端帶過來的Token密鑰進(jìn)行進(jìn)一步驗(yàn)證
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
        try {
            jwtVerifier.verify(token);
        } catch (JWTVerificationException e) {
            //Token密鑰有誤
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }


        return true;
    }
}

4.JWT攔截器配置

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //"/user/login","/xxx","/yyy/**" 為JWT攔截器不攔截,直接放行的接口
        registry.addInterceptor(jwtInterceptor())
        .addPathPatterns("/**").excludePathPatterns("/user/login","/xxx","/yyy/**");
    }

    @Bean
    public JwtInterceptor jwtInterceptor(){
        return new JwtInterceptor();
    }
}

總結(jié)

以上實(shí)現(xiàn)了后端對用戶登錄的身份校驗(yàn),希望對未來的高級工程師們起到幫助,謝謝啦~

到此這篇關(guān)于Springboot中JWT登錄校驗(yàn)及其攔截器實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot JWT登錄校驗(yàn)及攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java如何判斷ResultSet結(jié)果集是否為空

    詳解Java如何判斷ResultSet結(jié)果集是否為空

    ResultSet 表示 select 語句的查詢結(jié)果集。這篇文章主要為大家詳細(xì)介紹了Java如何判斷ResultSet結(jié)果集是否為空,感興趣的可以了解一下
    2023-02-02
  • SpringBoot 內(nèi)嵌 camunda的配置方法

    SpringBoot 內(nèi)嵌 camunda的配置方法

    Camunda是一個基于Java的框架,支持用于工作流和流程自動化的BPMN、用于案例管理的CMMN和用于業(yè)務(wù)決策管理的DMN,這篇文章主要介紹了SpringBoot 內(nèi)嵌 camunda,需要的朋友可以參考下
    2024-06-06
  • spring的@Transactional注解用法解讀

    spring的@Transactional注解用法解讀

    這篇文章主要介紹了spring的@Transactional注解用法解讀,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java詳細(xì)分析LCN框架分布式事務(wù)

    Java詳細(xì)分析LCN框架分布式事務(wù)

    這篇文章主要介紹了Java LCN框架分布式事務(wù),分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上
    2022-07-07
  • SpringBoot框架內(nèi)使用Java調(diào)用訊飛星火api完整步驟

    SpringBoot框架內(nèi)使用Java調(diào)用訊飛星火api完整步驟

    近年來人工智能技術(shù)已經(jīng)成為了各行各業(yè)中不可或缺的一部分,訊飛星火認(rèn)知是訊飛科技推出的AI開放平臺,為開發(fā)者提供了豐富的人工智能技術(shù)接口和服務(wù),這篇文章主要介紹了SpringBoot框架內(nèi)使用Java調(diào)用訊飛星火api的相關(guān)資料,需要的朋友可以參考下
    2025-05-05
  • Java EE過濾器優(yōu)先級控制的實(shí)例解讀

    Java EE過濾器優(yōu)先級控制的實(shí)例解讀

    通過使用@Priority注解,可以控制JavaEE應(yīng)用中過濾器的執(zhí)行順序,在上面的示例中,我們通過設(shè)置不同的優(yōu)先級,實(shí)現(xiàn)了TimeFilter和LogFilter的執(zhí)行順序控制
    2025-02-02
  • Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    這篇文章主要介紹了Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 微服務(wù)和分布式的區(qū)別詳解

    微服務(wù)和分布式的區(qū)別詳解

    在本篇文章里小編給各位整理了關(guān)于微服務(wù)和分布式的區(qū)別以及相關(guān)知識點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。
    2019-07-07
  • Java工廠模式之簡單工廠,工廠方法,抽象工廠模式詳解

    Java工廠模式之簡單工廠,工廠方法,抽象工廠模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java工廠模式之簡單工廠、工廠方法、抽象工廠模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java拆分List的三種方式總結(jié)

    Java拆分List的三種方式總結(jié)

    開發(fā)中我們可能會遇到一個大的集合,然后我們需要對集合進(jìn)行拆分,在這篇文章中,主要介紹了Java拆分List的三種方式,需要的可以參考下
    2023-05-05

最新評論

临泉县| 广元市| 宜宾市| 山阳县| 勃利县| 科尔| 河西区| 岳池县| 内黄县| 边坝县| 乳山市| 武城县| 舟山市| 姜堰市| 怀安县| 东兴市| 阳春市| 霍州市| 资源县| 喀喇沁旗| 吉林省| 兰溪市| 乐业县| 建阳市| 新河县| 安多县| 工布江达县| 莆田市| 西平县| 喀喇| 博野县| 夹江县| 军事| 全南县| 闽侯县| 嘉善县| 呼图壁县| 台湾省| 阆中市| 简阳市| 汉阴县|