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

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

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

前言

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

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

一、JWT是什么?

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

二、實現(xiàn)步驟

1.引入Maven坐標

在pom.xml中引入Maven坐標:

        <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進行token生成
        return token;  //返回加密后的token密鑰

    }

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

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

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

        //通過預檢請求
       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密鑰進行解密,獲取用戶id
            userId = JWT.decode(token).getAudience().get(0);
        } catch (JWTDecodeException j) {
            //Token密鑰有誤,無法解密
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }

        //通過解密后獲取的用戶id進行數(shù)據(jù)庫查詢,判斷是否有該id的用戶
        User user = userService.getUser(userId);
        if (user == null) {
            //沒有該用戶
            throw new ServiceException(Constants.CODE_401,"請登錄");
        }
        //獲取從數(shù)據(jù)庫查詢出來的用戶密碼,對前端帶過來的Token密鑰進行進一步驗證
        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();
    }
}

總結

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

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

相關文章

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

    詳解Java如何判斷ResultSet結果集是否為空

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

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

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

    spring的@Transactional注解用法解讀

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

    Java詳細分析LCN框架分布式事務

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

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

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

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

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

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

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

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

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

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

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

    Java拆分List的三種方式總結

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

最新評論

迭部县| 保靖县| 汕尾市| 新巴尔虎左旗| 视频| 平昌县| 靖边县| 翼城县| 苏州市| 确山县| 雷山县| 伊宁县| 石楼县| 南郑县| 柞水县| 板桥市| 唐山市| 无极县| 双峰县| 永丰县| 巩义市| 响水县| 吉林省| 沭阳县| 汾西县| 手游| 白河县| 五河县| 滦南县| 防城港市| 昌都县| 固始县| 九江县| 奈曼旗| 莱阳市| 交口县| 津市市| 康保县| 田阳县| 清苑县| 吉林市|