在認(rèn)證階段DaoAuthenticationProvider會(huì)調(diào)用UserDetailService查詢用戶的信息,這里是可以獲取到齊全的用戶信息的。由于JWT令牌中用戶身份信息來源于UserDetails,UserDetails中僅定義了username為用戶的身份信息,這里有兩個(gè)思路:第一是可以擴(kuò)展UserDetails,使之包括更多的自定義屬性,第二也可以擴(kuò)展username的內(nèi)容 ,比如存入json數(shù)據(jù)內(nèi)容作為username的內(nèi)容。相比較而言,方案二比較簡(jiǎn)單還不用破壞UserDetails的結(jié)構(gòu),我們采用方案二。查看全文>>
單元測(cè)試就是針對(duì)最小的功能單元編寫測(cè)試代碼,Java程序最小的功能單元是方法,因此,單元測(cè)試就是針對(duì)Java方法的測(cè)試,進(jìn)而檢查方法的正確性。查看全文>>
QueryWrapper是MyBatis-Plus框架提供的一個(gè)查詢構(gòu)造器,可以用于構(gòu)建復(fù)雜的查詢條件,同時(shí)具有高度可定制的功能。下面是一些常見的用法和示例代碼。查看全文>>
Java的內(nèi)存模型定義了Java程序在運(yùn)行時(shí)的內(nèi)存結(jié)構(gòu)以及多線程情況下,多個(gè)線程之間如何共享內(nèi)存。Java的內(nèi)存模型保證了線程安全性,避免了多線程訪問共享內(nèi)存時(shí)出現(xiàn)的數(shù)據(jù)競(jìng)爭(zhēng)、死鎖等問題。查看全文>>
獲取FileChannel不能直接打開,必須通過 FileInputStream、FileOutputStream 或者 RandomAccessFile 來獲取 FileChannel,它們都有 getChannel 方法。查看全文>>
Runnable和Callable都是Java中用來實(shí)現(xiàn)多線程的接口。它們都表示可以在一個(gè)單獨(dú)的線程中執(zhí)行的代碼塊。然而,它們之間有一些區(qū)別。查看全文>>