sZ)Qona<_6^o=ohJbYq5-;Mn>uyq&rb;g{fw&%t4Pu4@t#LbA`L;Hry8p~NJeo!
zO~t8k@rI<_DZJgOxdm~4;l!GdN1Jc)L0`YrgBNS%3^FRk&Wepux9o6>=ymz1XDqUKrwf|ht9^I>bgFz6!*A?cr+LcEQAd3A_gT?+>C=dk($rj%(!bZT4deHCI+
z$pg0vo|;@_sy@W!8W9BZ^|Ak6Xl9ep<~~eCP*@I=9L$Ty0ABuD{Ilqrc|XukCJk
zPw=4UPx+C`?sr_YC{;-)DN!WO$6z?(!xP3ngX~TLL)hFrSe5<*@uGlHWh(V
zbx^3HN^qR1DG(`gtx<3~Ay_aF?BHD7Ovs?8WYE;LL|{g^H57s?W;A+=3}B{y!fKLk
z@@)+2AcMq6Vz!KAe9#v*VC29i`^TvM-_0X7)U(`j9ULKft}tF
zocG)HBT0BralXI?cU+j$q60$9NRBx|zm(0=5(w-p)KP;#XaPH6fehjz??4(el21h&eh%s+B58QRc2CXV|_<)&rFhPw8VJ&GEIMAmz
z8ioF)>E;pckOKwzxA#L)7JA9R*{}`b_tnn@
zREKocNBfdaSMXZ3seo?X0>=FJK4-hHz83#Nl8}GZBr!W=h0Rol?>6YEAA`Dv;h%fm
zHREWHIu_^Sus=BM-33qXAJc|bdmq%9H+-=fYxg{5)XTzYYN-O@&lE5KfJ
z+7)PkR$$hQN(!cCanV%|x9O9(H}h2(brhm0;0DcjKQa$(1(A^lSA;kO<>#=P;80
z-6ZE}^hns`q;*)r22F`EAn$z{CFR$D&jYnAyZqMbyt1PW;Q@W?#X%Ll^%UnD(uLiM
zf-agZTxUE`lU+Y`tusU4#v^(=1a0Cg4~L42S0t9TZ0rq|fpx`nPjh>AKGr>OWo?Ra
zidkaxkvheOj`)jJD|S~TerUFa`r5uuf{;}$dn&0{l%9rJM!taFF>00Sr1cg_c$EsM6bv#L_
zjcmPN&)6e3f$1L)C^diLJIyF=Np1p8Y4s$ng>2-fi|
z0-W}c(i&%j08uM-wS5LqhClK>6US70v}v_9p@K575ko`9?%0G~Fa;y>I`WV91@CYp
zUqeIr4VMqBtsNrxqq8Z3OOhLc%#HERDLD#%)xAk5S2ohU6~!4!3E_Ek9nMP(A%*&2
zNf2#zn;X_r8J`VU=OtRze4Q>!dw~4f-19^-p(3^jwehkcCO*~#m}Ya#Fa+<6W*RPG
zLNKQ;n;F8&$mR`&Tq=Q;7%`g_zUuJ$m#lrZS)nk--fIGQ!KCn8Cws}(xnDvBC>?g+
zg0Vo~NP|g1AhG}AauQdJkJLX64>8UPA0*{J-l|(%qB5cOxnEcNzK|Crhl_ecTJ!zq
zAX(@ELe=L3Y~1>QA{Ckk}s=0RX$pjkJ{H)0{Qq
z{*fn}!lth43!4bU#)eYh{;I?)TqFsVa)gGtGVgDa%IKD3Ep{oJOX
z&1RW}!riz5495zp6Q&7sG=99+oT}4u|JOAy>O7k>w
zjttZ_@(zrcH-FlOT)g=;I@QiMN(Gvr4JNf1Y+k%`&uf)P0Dg(RZI%kku)CK(yBcEY|?4S
z%~dn2H@DD>R86FP!lC4|Jq^EVUxHQ5Z9nwPu(+Z*gmY^$=^`cHs-&kSMH&!RwyyLVDYfGn2^OCehN6J#*wJ0Bmg=Lhgoz3@%mWho^J${aH&TM$=}+i
zfIKEYkb$0eTwBFK;6MNUL9&rLQr2wh;AqQw<%cS~aXFG!VDFdB5}Un~37t8*jI&cw
zf?tOPL0}jrK$Z<_3N12&>V!hVWR@7rjm!q}`betV*b|(*-)su6bYH*KU4C-;pd5X#
zk8P8`*m2eTAzz2@KCE}_Zg7$lOfWX=x)Bp>JI>BB46fW76B2kwlTl=|{ecjYZ6+_^edZ
zMV{9+@s-xxZ^lc4#Tx%zeKjJQ9$a{G|Rf4&+opY
z2;(?PDX`#Q>d8jr<60e(b0A&bqMVo9;8;ReT`6V4f2)@p8)mT3vZ2hth&L@LMjalP
zoERPRJb5&@g+z~$XMSVt{Tx+_ri|kvEZ+vElhGiYR-^J<-mJ6s;aO(54Sl#x$>Xr0
zR42HkO~yAu1U~HNJi%|7L}oo)Z{iWBU%yY?S;QNCZmh1XHIDO4Vbg-U0guOJ^e
z4RmP`QZNR}sfEwte8X?D0tgEx8`eq~fZIMkDdXjpO8vjp_kZMRRro_ube{`HXYvju
zjvk`+Yd!AG)QpeQgPw{KL((4lEgDT!Lg)$Y$7rBu2=>%^u*Q=$A#ewr!)RJzc?zR}
zMQ6R4d^c7Jq?r7{lekyxI4&>cmefF#UDO-w%!IyoXZ?W29goX#pD3Lu7oxCobT^JdFGwDGp#1#S|dw
z?P`4Iv1vm$v-s8XW>2_;TsIx2&~>pBpLVywq@sSZ5vEwa6pP)n8dc!H4fmW?o6Tn_9|5<{sGeND52Vg<)<)VBa
zA*>^YYK=~@KI$+a0~oG|I`O4S6tq)GJxZ-X8M?}sa5zuF78R%ItTr+Q`T|g_
zzYwK1T65o13r0YW4&YE%so8c9CjChiT%p#FDx$~(KWSlJ&`C7G@BrP_3G=b)dr-@C
zb+&e`DUJ8wR_KZIS^x1%6Jj=i)kD&LonU*@0l}`uk?(}`w?z=uk51Y`8Q5#@9nJmh
z{+&bf?nmynW|n>)nFVZzI8xjI9tEsv@a+C-5^GN&07V0i#D7+`|HLoXJqRWE)=jYfvp2MA<&nYzQOe4(jUe)I<}EiCO*Ab%jzePAUs
z+TZ<2n7}}I{XTIm1Q_J;X%Mezz%n=ecdfgGf
z>-*R!E*>Bc{xn{0|!~6uKoRir74*Wy;rP@0ok&g7gSGigj`dM?!O_`e>xWb$SUkbgV+mY?_akYVC
z7VMkmOT=(G8cklvBR#%|
z(Ky{%)Fcri&rX<4%qe-e5jvD%p2h7XxqS-rPIvN-Joje?hCDzFH6R$~+H@#mLs%;*
zMG;U4>B@Ar!G`TLm3;BbmU=(mgVybQC|~lJ*!mEXcHCxOj!2=>gi78;^@vJz_)3ug
z1i=cCFVZX+HXO{Lm&_P-7U@in{>y5#ml
zsk_PG&+`S@+!j8-i3LV2cP>do5)+irUvxu2FWIhkiFcxiL$liEPCK7l+bdK7w>_PK
zs;jEQQqnxSc3269Ih~Nl9eIa;{Cc`MG8>mEA=1vN^YPuNSFBIEj*-PP+tUSAL+HdQUqHEB0v}Ne(*E#{uu_rPzEzlJ1lrs&qU<#1
zu(b>hRxA2``eq9c0~w^iMt(fb?&oNoc@HQ08Uo+ZdNj>Dd6iQ;g@w}uRPGO!?l8+N
zkV*XrunQ3AH!cbn1k(85FOh<#Cj;ir`xB>oGkEm!4H7~ct<*xIr#PV3cmO+JDs51y
zKUn`fN0`PGnF*G2qC{I;onJ>&QT`1eUc4^0nK{S5D*;BIeiPun|3*J5F6PT!8M^z`
zmeyoK9Uxk4faYKS@IHM*)wt*Vt7Q@h#VL`PY7&o$+Ts8TZmtiY$k6`_Mb^bU$RVS1
z1bYJ=nbakjL`&YwXOL%Uc0@afGN%u%G}H6WC&hhTlPwzj?IbRXWzuIS5d_XR%CD<|
zP;VX;juhq4Uo0oQ6FYuf4OKnteG;~7qdDYU=FNfpZNse+5d|J1Nslm|B+t8H2RN@^
zi+A7gajPVjhL_rLy~9r>KpPlSnd=b^Wgf0H^MYl#;r=lCT$&o?PI(3xXdUB7~i
zxNgkd&_!&}!vAIZ|3}*KM}pu-j$50ELG>Zagy*`Dz(r3c;aTb=c@9
zem7M@RQi0bS2VdK244g$^dv54AwooTc3dq)Fs)=$O<;w}rnNS*3EJ~eTsO$b`u#wGa^j)<}+
z=8J_6#FB$ThY~7Cfg^Xb$yeC4b5nj>$A3rEy0Op^nBG&bclm_$gGsFeXW
zVjObp^0l|{-QHF!JREyWWL=tzil49SsB;_<=~!*QzU^rgkWUVTTPnX34Pa4{Vo)16
zEce8Zt(ny*uNVXiMWcTB83At?!%^F4*l1#?@wf6Xds+BAc!)5KY;?SI@{5k1Gc5^z
z%Jk-j%d#D@`5?}YJAIP&$N>qGOFrClx!aaaa}t5`&rXS=#@B@o8}XymHb!Z}CQ8Ml
zzC^7x4%QaWuW%&H#@+1D>82^9rfwGM1p*fPD!V#2_O6IwcKOR!(y}DVAxy@q28_>q
zZM^#_bh!;~y4p>T26vLYW1Z3HH=(EwS?o!v=IoR+r;qC7HtY1U9~2Ip4>{#kg>@e4
zDbh}2FD;8!rC=bTQGNI>H>+{>P8dCYOIeKz3oC9I+Y4C9HJ0;NruB#zJ=n7w7KnCxRK6j@&w;l_}Uz|7q4lfh6D>UxFSYMy$pNUsg7E@;#(Ah`fCd^@u>1f{s_l
zW{w5*$T&oX*Bg*Fxc?()V-*PYQx3G^4Uxmf5H#h!?(;{JBVqyD32mM8%%zQ)
zdu78C3bSRH30Gg;zUF>kk7ngs*C0xh&x=pdPgpyQ()R1u0FA}gAxjn9gE1|!o;z){
z&Sv^z*(Y%E
zah*lUB&C2t)YZfO(m^aBC1CCd>~^rE?)|rR$3K`(lkZj(q6UU-wuZduy{Wc=Oe3NF
z)cQIR=nE~toRgb(cs3>~qTUO=i3Izi$a;-nd7t*FVdklF0AM(uw_g*nm^N(9Ej+!E
zUJs2>x94q-pal^FvGeU!HgX{!LaP16VWqdw*<{6^U-$D{uyi2~R4@gTd=!nNtT4S>
zhe&C=z#$sS>DEoJy$47}1K`1(XTKKdhn{FEJl_Cpn0j#n6X+wccI42oI7Z-vBWW$I
zedOtV&ODfFpP&P6m!{_QEFa06RgvLf6_lalP^xXMQ^af!H~?X#UunsG{#&7xd7%>%
zE$aZf0y9ZV%?(@BguXYi(SN;zU^g3jPWCAxqc$t)E>a$r$9OY
z(+*ZYMvjD2pn-l`nT=+@z4|F9Qcp+zoqg}%7p-6eyT~ECdeGRX#nA_puw
zeLhG22~c>D>*-KX=ncSU*(;)YG@PBdWLwCVZ+~{HcxG38^={;3gjhF*_fv-L{u*ab
z&6tj-{s5Nd1dKm2?{mlHZyHR(Jmc>1@|j2PMiPvHbke0O^|O?Q@KCtL|AlKc-$fqm^zbC#{G4Ap$GQU$P6=|(VsKJn(?f=~8
zd%-jHC|h>rdPAn-Dj!GI67a@3m8n5iZz>*$nC%DRM}?u9YgeXWU5OX=FKiTUEqqN)
zLUpl_c}3(g9s@xzsWaC>J~$h{;M)IA&ew@I&vvHayOUnao2B+SGfm`336TFP;L#9|
zCXKi?AAwwoH}aacvF=Ga@e;1r#o28^qwp|1uIjG7A8YMtPNTEREMu!J4(D=7X;goe
z{qz$Ryc3uQ2n4Kzt?W#MFdR(CX`hort=m6VK^j7{bX#U*)~4HJY)q*3q0g{6hvARR
zM>=)V*U_=fzXpUR^lqG}E0xsndPd4TyO;>x!fo5lKa5Ze@N51Z`F!b+p-D-((MoGZ
z9ve8~33k^YVY^|R_McxdowGwHs?FjAjpIWg$L|1ZH}apY-MqE;^an<;>|*0AlN*+H
z!WyK-3G%^1zV`Rk`vo|rz4gMJp7{|)^h_zt_ld`gXuD}A4P+I~B{i0V=Yv*4c`*sN
z+;KPUn-|<&JBgVtFa@RypNTmhEr8-aU4c@PUV8Gn5E2fCZi}vD@W;V7If({F<}Za4
zI!c(Cj>itm7rL~r9Nq7KI=Z}!DS_cG+U^Zh8#UbO`LKC&r@oMD?6%=rP<<5qlC;y8
z*FpknxKwbMKO6QsDjjV_Z~xGEX0}LJ8%XH(?q}w#`3TLc&N@qsdZqbZmPZLowAVyU
z!BXdi2mpxsvgcn}X_E3WomX}6JyU(YP4AbLw0-}_Mt5X~!z&+nU9C|VgqCSGM7i2-?!)!o=`|2hj3-OXKo%ciX}Rf
zl=pV<><)HN?Dq+~uEbGo9T9Q!$v0jOx3!Lrc*XBGrRlW~$$5xARv7h)hxTlHS@pJ_
zRKFI$OqUYOgv)6y_WtVX%ID_GVY#}->df~CzN0BBmsx3}bG&6g291jjzDI+*pQx~O
z*+&pf1o&1-ZA{hiMpaW*T+uQWUVCJNEw5cJ2Xv{4a%CQwpcrHxby|3?zon3K*j(oh
zrWdb<9Zt7z)<>IHU8bY9JNY861M+4^eON!$sIhSQ0`GSJ*b$HCRv=NY#*FLYVDlFP
zilwAfzqw))E#n(pVrfzo;{^N~GUZywl|6d%uw5pDLHAM}sEnz07pnX1n>`?h|j$V<*iuw;w8y
z>4s_lYP0UxkfZq97w_`=czEARTHc(0mOv7E-Ml=?NViUqq;T&-mr^54bE_jGjV2GC
z*A!#gSS`_U3mWkL*GXJ=$xMRt+;Ha5rq?0s31%h)`;BGIw6eBCaDaR+wb|@~xz((S
zKy9gPX)~V&X+4|uG3_}fQ&Z20XGO$-YzIMIiMf%>Dl*cNxcf
z%YIB1sCYAbKN8iS+9GPb9lMB;y+;n{-@%$0n9GH432Yc=lCj+YpXecWDV
zKLAw2*={~$K3kW(2yJ&;haTX8;1a->9&25a15Kwy%o7>jtHPc>b{Vefs;m=Opbab_
z8C>(-xzcZKfq!r9&@b(aY>JA#an6Ul+;npgs93rq)XAIiR7-@{GL8kwbwKZ)%wyEF
z8V*!K1V)mhyCpq?nxJPPTB6m^9=pEpy0CDYo|AgIY|7c=aAR?3ta0P^U8Cl0ClS}t
zTt~03=NNaySiFp#&IyHncDg^Rp6e)A_E49YU}xL|bzX~ZIj1|?tgjVj(dnhZvU(+=
z1N(fa+TVOhRLc4{^#syn&lRO76SgF%-uNA#Ixn`@@1c^q12jw3))9w+uAQHm+rEdj
z>7|4B#gffS^_@7kF54U<4VE4VV_9hfO@;%N89>IITm4S7wWdtPDeiOSoBfYjsVKY4
z4WO(`rua`ayMd>>h#0`augcXbgNK4{D5%J1-m}SCE#cy>@6}4$^3J4F4A$%{TGe!M
zGn{y5uyjMJaA^C_(u{m&fAg_Rj
zpibgcT88OC{U=f|!rX~aQc%ChRlOLN9VZ^(vj38A2kOYM=+d!3AnoVdrnV*Wz%B$}
z`CqHc#u>S&mp><@U5D`jRTkG!Z|(^C`h>NR{A{+3mZuw6p3mFL5pCBQ;Pwf#vbuao
zD4BdwKQ2Fb!*mSw25?wDz6BF}>*@`JFOE@doFJ2|%v_0V{XE%hFWMgzkBiENjX2-6
ze#F(!-BBg#gsVMyi`Hj8*|eOD>-Wo+zWD0E%*r+#(;AK^i66sLGB^huvO-nS)ENJ8;lzXMmVM!M>Ve`JtIpFrO`O)KnSzg
z^t2+45H~7mVjX!pT9=_1n>v~3qN!VJzcsPAc+zwdXr$Ub)hBYrRy=?>ra)A!l{
zHYWbkdl&*;JW9Ut$Xuc!-K}7gBx8l1R)eY1v1OdfNmTk00JEXKNb-vd^$8!SP8KD2I+
zmwSaChNcSzABXW1yEx7ev+3OcDrxi^-lQB)3~VMHq-u0;Nz^5rxDobqb5cIj)gUr*
z-$%nwXBtEJ8hSVCxT6%qm5C*`U8Qu3O2B`lCAW7Lm*QM5E|$dmHbSWy+{D#3IS1D4
zdxj93N(R0P&BvXSQ=46jSwn5(_?LYCX+#Kp2fbKBQ)3Ub`0kKGsw!KUCJ)ncDG%0D
zqJQ=67YG8oFIa$Z@dc=t`!_l`?tAEN%z#9l^BY)+gv6cgxO{H7%YHHP0t9lXcu)jJ
zH$jP}h2Stju6l7)NV?66BrR>uz~gG+4iFGnKHf)pFMl&W(ar1Y@253!ZZG`93_%=$
z8ePm3vPfR}9*o&kOFo-
zA=k9*tjB4^&Oxj5Cz@v8d2-Jpu7gTbfkY
z%%yT1DvAgAuU-QOd8^^vJa=B8$RtfwIJdY+DH$vjU1dqx&Kp
z>fFcz4kQhq45lr@I}oPk$asZBux1v#>KF&s5X$cpF?8M%Bhl!$&NdEYPvC-A9W*rY
z?+XOVTXcEOLxlVaY%>c?-0wG|1cZO){gw}?3g?%|5#qDC9J~#(QUgj||8_idnZB(E
zfznk>+w_@L+rE^>h^Y5sfzojh`YcxxQVJtZ|G7%vUF_lC75o3*ybq#455C=SMxW2-
zZO({V^^OTyFZ`yl&G1bd+3<;}^GbZy7g{MGa7;TPAa1Y6@A^F@k9K)=MmEk#Q$TQV
zEgT1AM+dZFM3j-2-gg-!-+U}OaRF2j9WQI&^E>cMtD3`stYm0jrdQEkMpua)L;>aA
zmk_-=&q97(z(m7-N^_GNX*+vX95eT;u`lgr+@y|uCLgK+U3#g=sX!Ncay#iF-Fj`i(25)~?u|vO=%_q%@@I!lvH@LN~hbywD{Y_h`2a9f-N^rdIDW5u@
z|K0`C#<${f^rZd(i%2z0iIQlrifUBS(eEPB%zjD!#h%CF^_`-;z|up3Q*kQjI~?rb
zFj^7fdS@YY|CD5dDatU5c5&!vlf?)43?lO~=edVybaY}$_`vrt)JRogDz_q`%2UTQ
zUkp~hZ}_W|LdW*l(lf#-R%oKPu4lcHLqL&PMvilzrr$?yzkRzbUQ%6HnS<=}DGEga
zc5!j}!-N`&k1LWukrjV7MMUPD#I~>ZF0i%8K70>#8e&T7#gje@se^C3Ah+`_lS!EU
zPLQ!iCZ56r$c2zyAU~n3<0_`9dht?J1)1;Z*o9Z
z)bDY~WYXSjx)nq=psqk5K-o~#*>E0SBB#R*F0A`G3f{N5s@jc48S;5&9^ZRD+g{2%
zF}mp+=_+>G{H5C7C(EbxiR5QssY^oy?-$UiwI!YHO>8n{TCkPy^GLzu<3l+369s@}
zSbIKZ0~7DYOW!zq%u*jw8tBTapYj^Q2<4Clj64}&k=B4*Cr}-KwW9|Q0OQ2p^B;0m
dW$!K|sqRA(bEHVV0vrmYB&RN0BJ(of{{Vi!HsJsO
literal 0
HcmV?d00001
diff --git a/src/programming/java/framework/SpringSecurity.md b/src/programming/java/框架/SpringSecurity.md
similarity index 97%
rename from src/programming/java/framework/SpringSecurity.md
rename to src/programming/java/框架/SpringSecurity.md
index 1868fb0..847fc48 100644
--- a/src/programming/java/framework/SpringSecurity.md
+++ b/src/programming/java/框架/SpringSecurity.md
@@ -1,3015 +1,3015 @@
----
-icon: simple-icons:spring
-title: SpringSecurity
-date: 2025-05-07
-category:
- - JAVA
-tag:
- - Spring
- - SpringSecurity
-star: 10
-description: 若依的SpringSecurity案例
-# 此页面会在文章列表置顶
-sticky: true
----
-若依的SpringSecurity案例
-
-
-
-# 一、准备
-
-## 1. 导入依赖
-
-### 1. 父依赖
-
-```xml
-
-
- 4.0.0
-
- 01-druid
- 02-SpringSecurity
-
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.3.0.RELEASE
-
-
-
- com.mangmang
- learn-test
- 0.0.1-SNAPSHOT
- learn-test
- pom
-
- 依赖版本控制
-
-
- 1.8
- 3.4.3.1
- 3.4.1
- 2.3
- 1.2.4
- 0.9.1
- 2.0.8
- 1.21
- 1.5.1-RELEASE
-
-
-
-
-
-
-
- eu.bitwalker
- UserAgentUtils
- ${userAgentUtils.version}
-
-
-
- com.github.xiaoymin
- knife4j-spring-boot-starter
- ${knife4j.version}
-
-
-
-
- io.jsonwebtoken
- jjwt
- ${jjwt.version}
-
-
-
-
- com.github.jeffreyning
- mybatisplus-plus
- ${mybatisplus-plus.version}
-
-
-
-
- com.baomidou
- mybatis-plus-boot-starter
- ${mybatis-plus.version}
-
-
-
-
- com.baomidou
- mybatis-plus-generator
- ${mybatis-plus-generator.version}
-
-
-
-
- org.apache.velocity
- velocity-engine-core
- ${mybatis-velocity.version}
-
-
-
-
- com.alibaba
- druid-spring-boot-starter
- ${druid.version}
-
-
-
-
-
-
-
- com.alibaba
- fastjson
- 1.2.75
-
-
-
-
-
- cn.hutool
- hutool-all
- 5.5.8
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
-
-
-
- mysql
- mysql-connector-java
- runtime
-
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
-
-
-
- org.projectlombok
- lombok
- true
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.3.0.RELEASE
-
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
-
-
-
-```
-
-
-
-### 2. 模块使用依赖
-
-```xml
-
-
-
- learn-test
- com.mangmang
- 0.0.1-SNAPSHOT
-
- 4.0.0
-
- 02-SpringSecurity
-
-
- 8
- 8
-
-
-
-
-
- com.github.jeffreyning
- mybatisplus-plus
-
-
-
-
- eu.bitwalker
- UserAgentUtils
-
-
-
-
- com.github.xiaoymin
- knife4j-spring-boot-starter
-
-
-
-
- io.jsonwebtoken
- jjwt
-
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
-
- com.baomidou
- mybatis-plus-boot-starter
-
-
-
-
- com.baomidou
- mybatis-plus-generator
-
-
-
-
- org.apache.velocity
- velocity-engine-core
-
-
-
-
- com.alibaba
- druid-spring-boot-starter
-
-
-
-
-
-
-
- src/main/java
-
- **/*.xml
-
- false
-
-
-
-
-
-```
-
-## 2. 配置YML
-
-### 1. application.yml
-
-```yml
-spring:
- profiles:
- active: local
-
-server:
- port: 8000
-
-swagger:
- enabled: true
- pathMapping:
-
-token:
- header: token
- secret: asdaswqesdzxwr3123
- expire-time: 30
-```
-
-### 2. application-local.yml
-
-```yml
-spring:
- datasource:
- # 配置项目数据源为druid
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- druid:
- url: jdbc:mysql://127.0.0.1:3306/book?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
- username: root
- password: root
- initial-size: 5
- # 最小连接池数量
- min-idle: 10
- # 最大连接池数量
- max-active: 20
- # 配置获取连接等待超时的时间
- max-wait: 60000
- # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
- time-between-eviction-runs-millis: 60000
- # 配置一个连接在池中最小生存的时间,单位是毫秒
- min-evictable-idle-time-millis: 300000
- # 配置一个连接在池中最大生存的时间,单位是毫秒
- max-evictable-idle-time-millis: 900000
- # 配置检测连接是否有效
- validation-query: SELECT 1 FROM DUAL
- # 官方推荐配置
- test-while-idle: true
- test-on-borrow: false
- test-on-return: false
-
- #监控配置
- web-stat-filter:
- # 是否启用StatFilter默认值true
- enabled: true
- stat-view-servlet:
- enabled: true
- # 设置白名单,不填则允许所有访问
- allow:
- url-pattern: /druid/*
- # 控制台管理用户名和密码
- login-username: root
- login-password: liujing
- filter:
- stat:
- enabled: true
- # 慢SQL记录
- log-slow-sql: true
- slow-sql-millis: 1000
- merge-sql: true
- wall:
- config:
- multi-statement-allow: true
- redis:
- port: 6379
- host: 127.0.0.1
-
-
-# MyBatis Plus配置
-mybatis-plus:
- # 搜索指定包别名
- typeAliasesPackage: com.mangmang.**.domain
- # 配置mapper的扫描,找到所有的mapper.xml映射文件
- mapperLocations: classpath*:mapper/**/*Mapper.xml
- configuration:
- # SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
- log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
- #开启二级缓存
- cache-enabled: true
- #配置默认的执行器
- default-executor-type: reuse
- # 开启驼峰命名
- map-underscore-to-camel-case: true
- # 允许 JDBC 支持自动生成主键
- use-generated-keys: true
- #关闭logo
- global-config:
- banner: false
- db-config:
- # 全局逻辑删除的实体字段名
- logic-delete-field: isDeleted
- # 逻辑已删除值(默认为 1)
- logic-delete-value: 1
- # 逻辑未删除值(默认为 0)
- logic-not-delete-value: 0
-```
-
-## 3. 配置Mybatis-Plus
-
-```java
-/**
- * @Date: 2021-08-10-17:31
- * @Author lj
- */
-@Configuration
-@EnableTransactionManagement
-@MapperScan("com.mangmang.security.mapper")
-public class MybatisPlusConfig {
- @Bean
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
- // 分页插件
- interceptor.addInnerInterceptor(paginationInnerInterceptor());
- // 乐观锁插件
- interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
- // 阻断插件
- interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
- return interceptor;
- }
- /**
- * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
- */
- public PaginationInnerInterceptor paginationInnerInterceptor() {
- PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
- // 设置数据库类型为mysql
- paginationInnerInterceptor.setDbType(DbType.MYSQL);
- // 设置最大单页限制数量,默认 500 条,-1 不受限制
- paginationInnerInterceptor.setMaxLimit(-1L);
- return paginationInnerInterceptor;
- }
- /**
- * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html
- */
- public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
- return new OptimisticLockerInnerInterceptor();
- }
- /**
- * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html
- */
- public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
- return new BlockAttackInnerInterceptor();
- }
-
-}
-```
-
-## 4. 配置Knife4j
-
-```java
-/**
- * @Date: 2021-08-10-18:14
- * @Author lj
- */
-@EnableSwagger2WebMvc
-@Configuration
-@EnableKnife4j
-public class SwaggerConfig {
- /**
- * 是否开启swagger
- */
- @Value("${swagger.enabled}")
- private boolean enabled;
- /**
- * 设置请求的统一前缀
- */
- @Value("${swagger.pathMapping}")
- private String pathMapping;
- /**
- * 创建API
- * .pathMapping("test")设置访问路径统一前缀
- */
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- // 是否启用Swagger
- .enable(enabled)
- // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
- .apiInfo(apiInfo())
- // 设置哪些接口暴露给Swagger展示
- .select()
- // 扫描所有有注解的api,用这种方式更灵活
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- .paths(PathSelectors.any())
- .build()
- /* 设置安全模式,swagger可以设置访问token */
- .securitySchemes(securitySchemes())
- .securityContexts(securityContexts())
- .pathMapping(pathMapping);
- }
-
- /**
- * 安全模式,这里指定token通过Authorization头请求头传递
- */
- private List securitySchemes() {
- List apiKeyList = new ArrayList<>();
- apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
- return apiKeyList;
- }
-
- /**
- * 安全上下文
- */
- private List securityContexts() {
- List securityContexts = new ArrayList<>();
- securityContexts.add(
- SecurityContext.builder()
- .securityReferences(defaultAuth())
- .forPaths(PathSelectors.regex("^(?!auth).*$"))
- .build());
- return securityContexts;
- }
-
- /**
- * 默认的安全上引用
- */
- private List defaultAuth() {
- AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
- AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
- authorizationScopes[0] = authorizationScope;
- List securityReferences = new ArrayList<>();
- securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
- return securityReferences;
- }
-
- /**
- * 添加摘要信息
- */
- private ApiInfo apiInfo() {
- // 用ApiInfoBuilder进行定制
- return new ApiInfoBuilder()
- // 设置标题
- .title("标题:后端接口")
- // 描述
- .description("描述:测试")
- // 作者信息
- .contact(new Contact("氓氓编程", null, null))
- // 版本
- .version("版本号:" + "0.0.1")
- .build();
- }
-}
-```
-
-## 5. 配置RedisTemplate序列化规则
-
-```java
-/**
- * @author a3621
- */
-@EnableCaching
-@Configuration
-public class RedisConfig extends CachingConfigurerSupport {
- @Bean
- public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
- // 创建一个模板
- RedisTemplate template = new RedisTemplate<>();
- //创建一个字符串序列化器
- RedisSerializer redisSerializer = new StringRedisSerializer();
- //创建Jackson 序列化器
- Jackson2JsonRedisSerializer