From ba3a72d86cb502061a31484384eba631362d5cf6 Mon Sep 17 00:00:00 2001 From: pioneer Date: Thu, 5 Jan 2023 14:40:53 +0800 Subject: [PATCH] open --- README.md | 6 + dependence/authAPI.jar | Bin 0 -> 33911 bytes dependence/cas-client-core-3.2.1.jar | Bin 0 -> 87318 bytes dependence/casclient.jar | Bin 0 -> 23806 bytes fgAuth.properties | 5 + lib/authAPI.jar | Bin 0 -> 33911 bytes plugin.xml | 21 ++ .../java/com/fr/plugin/fg/auth/FGAuthApi.java | 53 +++++ .../fr/plugin/fg/auth/TempAuthSyncJob.java | 17 ++ .../plugin/fg/auth/TempAuthSyncSchedule.java | 44 ++++ .../plugin/fg/auth/filter/CasYaleFilter.java | 202 ++++++++++++++++++ .../fg/auth/filter/CheckTempleteAuth.java | 164 ++++++++++++++ .../fr/plugin/fg/auth/filter/FGFilter.java | 73 +++++++ .../fr/plugin/fg/auth/filter/LoginFilter.java | 106 +++++++++ 14 files changed, 691 insertions(+) create mode 100644 README.md create mode 100644 dependence/authAPI.jar create mode 100644 dependence/cas-client-core-3.2.1.jar create mode 100644 dependence/casclient.jar create mode 100644 fgAuth.properties create mode 100644 lib/authAPI.jar create mode 100644 plugin.xml create mode 100644 src/main/java/com/fr/plugin/fg/auth/FGAuthApi.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/TempAuthSyncJob.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/TempAuthSyncSchedule.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/filter/CasYaleFilter.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/filter/CheckTempleteAuth.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/filter/FGFilter.java create mode 100644 src/main/java/com/fr/plugin/fg/auth/filter/LoginFilter.java diff --git a/README.md b/README.md new file mode 100644 index 0000000..a21b62e --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# open-JSD-10171 + +JSD-10171 单点和模板权限校验\ +免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ +仅作为开发者学习参考使用!禁止用于任何商业用途!\ +为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 \ No newline at end of file diff --git a/dependence/authAPI.jar b/dependence/authAPI.jar new file mode 100644 index 0000000000000000000000000000000000000000..d9e98652c0978265f21aae202b1aae56427f5b93 GIT binary patch literal 33911 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[ zcI!{L^?SIlr>|5RFP7I-o_q~dMjaPX1P`&qB0E%`f zP^H>uy{pnTM4;Wnr8#6mfmvm*)LAwmFx~gYZ*agKoE;mM;i3X1(HW-Um|z$}@hkQD zS;}>cSoW+cP%^nfWHDPWv<*6luI0pf;@}4Uvd$TEpQ2JPydXgq2W33oc4)^lUk=Bx zo@K6~=B$i>{W&v*0|1!*1Ai-OYv=qIwf?um%~n5i zM^Qukvdu6{c6lS50p0@=gMGIpzJLsfIi&aM(c0+nkn5I<=OA_HN- zNLUSaQyg<9)Jay|Mzn8>#bLUUG-GHbrpsp5lwWr2Y(64EDp^9>IDE%7uk5^3X_eAw zmf}wem6=o!Ir}VY<>X>!V@1lw97iu$|#kL273~ZG7EwOghb=hNjj#GS>zSa}P@eU@8$ zO7?OT%kNGHM5%*$+1zo`B=-uSLMPthqNS|T#Fh_qeOjX`?RbEr{W|D5&O|ExN~`NR*&R_J)0ZT)VqPb;(b?syTokuiI9)%iuuS zODvE~s)SYvRnp^8KSPYPH%F4zX^fWo8GKv%(7k?IIZ>D4?8u_opo-l>b5=r~Ke4AAZNHq# zD>|DbZ@o%;m}5noA*r^3-U4R_9Mo)Gh_TA?s7N<{_F@bqV|mAzb%aXu=xj+&o}Zk0 z%2Ic^!$$(F$->G62XvZc_?7!ffXEY1O1Ai#5CMc^ z#2L&%vDC}YI<{AoLW%3DJh5~9{L}8APo4`Q13K%HLjpjC+>tZyVouVls1l5l+$Lwz zNYMKIN+VxNTW2J2qHp+uud~BM8= zDH!u1l*u5D3j0h~ltE2Og%-|b zLa5$Zl*5kWAd;o%l4~fVpcRKeq^dBaBAG+rf}&qh(G-sD)5~!X3D&-J^WSHCzn?hn zM&~MxEF-#t9y#2bf3m5)&~Uio`|;l*LRUi$q(YWlLpPmDaZA|>m_AYGHmBl zJh3o+eIvGIf8$xBc;Xcv!RD4?_l<9+v^+p!XJKPq+ha}|b#M0&c%jGGmi4QMMz|Mi zUbQjdd71Yn;lba#VFNAjqhRg9TSEeeK+T?!jZ=sQX&D5qV(hArePGiWbUkng?%{aZ z9-{Lru{VZuKW7!4$WvGLjxS&yb2%^mfYpzSN59~l&_yw$u|&~2ZbfNu!13|FD<{XQ z8Ruj$hJQxE0PQls*kSwKWp_pY`QH^akbu81DDV_-9Pv*S=J&@d{3lV^zj}qgagfHg z^`9ur58=SS^-d&FByri?-Zbt4sb*YxkF=J;k#2jXrR$aHbZv+R%siOxR1zk%*w|%; z`P&JmF^+MiRG$B&71sxY8>y~LdvhUoCVotz_q2QWpC(`efz#p`PdLE7h(r+<1<|SB zv8r4)6#2%)9_)f_3qRG_~DPon1O+DoOvQI{;=u$dEu zXLBD3JtVt+s~T37vvx$^Tck9U}z-^Ks7(SZX)U=4!7*>4jFF);f zOMv?-;B)BzWZ?Db`po_QLJ6qVRbAe5PhCVapD|nz1Rux=$1XkuL&eS_qWl#hMSGd& z!gC3Jh^V79wgX+)pDFFK-|7;S%gcU8HCB9rjx0>U$In zq3P{4rrvuv^qTsIxZ+-hs*#u9Z-TCzt*;3J0!sT&{@+i48-mz) zR9_(8Bxd-;8X+EASznyKZiEQRgf2q(-j!R~3h6QWa(-Vt6!)3h<3+qTa92uN~D05JqKrU{)-TeEAqt*dF{KJa(_9GJ?| zimw=i_Ywh#CqakTJzAVJxK-S}F`2Iyq6;%|9s{^4)$8?}Cybh&Hcnp`$9su(7AL2X zW~?7-E0GVg?7Y4Ak4$%xm2ga6O2rZ$biXr{#odR1LZdHfu8Mr5iuC4Po+Xj!=wYJx+DT*9PPNd+q*bMd@bhbJwzvU@OwmKpUO(2z$`*_ zjPN;5rAWwt+L(f@!^CgDNq@sa);`G81Dlgskp5wvIL<6J0X@0TBa&d+F{(@p=rh^~ zS)WpzPhTKyJ7z+8nS;_iK~joRf2>PHZ6t=hIc$ ziO!L+f3=22$_!cH% z;-MPmj9uNQj2usP<00S|PQl6>S(4P$P2952MW;e5JvT@BC$1tRqh?iWj?xW!jPlg^$M25Ku3rMz z7ZlJ*p-w}(lyc~(g=X?NGUC-Hs!?rRzv`%ml)$un{l{JIcy$^|B*zWao=4Jb!Jss! zXsN#8B;{6nn9aJB5?U^Fsz_9jB{SD&x#NL-xRo&r84Ww}8CAn9@m8duz!$w9RT>Rl zTfq+v6R#VyyjXFyoTtBJQD*(fp4RM~UbR1%+Q_$5b!r$S{4Ft3Cf$_n^pP_wqj8YZ zMOCA^yuXC5Q6bUUoG(F>v9%FZuIg2|`J6Lm73ikVZmc#b(sY}DipzpN6j+vSl~c!t zX*dVeFv4Tn1}#pH9TLQ6+oG2N1y!K<6AHSykU`7NL`Zq)9=2l8CF?HcJv}%KZ{=qj zQEsK2gf4OYKvgrtI?ZFeM7(|!U4C0GP`Z_B9~w=!WmT{rhmQs2rk}Vf9INUgj9IU3 zQIo+o1MU@^6^J!qG6T9kz+eU$!||@*}uN9!?+U(rlIFQ2h^t*Er+q zNFl}afz9GSLo@rIt#(4s{937hH4**stO16KV|M%;s}L5VY_ zm0571C9c_%!?WMD#mh`wVj>n%4~v1-b_kBkUa2@UGwAo z6NlciB`iYp_SSWiFzXIF$tDnJ^PMJAe!cM9B)VSQ)v5bhpR>9Hxnr?955{pbcvJ_w|h z1Q8!WFA|Yq17Sy0JrAFMftQ*X?NxBU*_)@)O5Gh@-EDGCl}Zm+u5)63vG8GU zc~kAX1hle^Hf#?AV?_X$4FNOl1;UC3(yAQUKoGV8ApNI-bz$aWxoUp-Oq=Dl$E3aN z3zpt+*kcyk?GQb_yLQ_0fxn#VhK7rHEOT7b=PSlnF%R;zkMTVDUyhon1nckI(oR;(`6D)`0b;%+zr3HXADWL5iQV>s!#18IPft?uL02Rj5x zkc4F!TYJU4#m_G)Fbd@!I6tEf+^{O}pW(FC*+~u*9sk&Qnpq)!Kt0{4RwN$ZD%%;` z_kIFNb*ZRT%~E$PRstu>*%2^N1oxJbnqh6X`dD6JO#Yxm-oi*6l*zlc0!kw-tN$8Q z_oYEw2}ZePSywO0-TiGb3^!<^BLXKdB5?Hy`OkdKUu1sjbYu1Qr|Rk951G^c|L~oE zQF-ilU29wp)UYeKPlR#3kS50w*W?AN%pdKmps<+>gRXYLyaknu7G@!Zt1jBWF9Can ztSQRURE>?Ozx7g!QP&1vxVARmWAHC5_*o0mA9kW2B###hSR`sl<38RzBohe2x4t25 z4@7crY;E3H6h^cL`tIQ&;y$E(Py22$YMeJy;t|4!?d>h9IC*mX9FUl^nL#<;X-jnN zAz0+Z#@^Kv>3PGAE`s2EPJoQ?+|QYWKQKG9t`a0Z;CsRlJ>7&g`4CloM^#x(?ze*5|~R=_b&pf@Ssy>PYk{kw-#Z)v;wTGplBASs&JA|^@Lt48 z?g>mpcsLAqe-vR^EpWOwYd@?|2~pBrFOR4sw!|BcuM1k2v*X>|(b2Fs4hFqW_xoj0 zbS8mKr@%>(@Yxyo_5DH1Dnq>OgNryNpp)lZOA#*J=kDSBxh5@vKhY1#<#qdR^=zLt z1$??T^q==o=2%ilTO~^jJ$M^00>NL9G zR6!wo;Do`KCk(*>&DG9Dy1@5ow zq{RY1P^HKSX3ymOaI`WdS&)!m0BXDDDuk%vI4zwQg6kqtsvbN{BUA&=>B!{*djaj9 z;Y|bXIgsjdLSx;8(c^TZRtQ@A=h$)L>N`_9K&xPfbm_7? zjIrfQi^{aC)%2`r`MT3m8k3FIb%gjrzrY%2Q;;pUov;O?$5cDmdUqW!h0YK{=802m zRP54AJvu<=XEs-n)V9IGkFE`g^(2U!=BIXN4$Slgwy3o@2$znsQ?46m5u5!9)GRZt zV^%o88ohp{Pj?Y0Wh| z42$)U+IeJ zTW1gRlG*K-nu&`)I12lGyo+N;;|xibsGb(gQ=E(5fMTAJD*NAb!H?WNdFwOn$cVBg zeK$||2M-?2edhMRNdkYJB)qY;Z@ zxKn+bWE;BWU_welKuSVNFAlhPBaW)#Kag&WhXr~C#&5bN*xPhC;?~l;H=o?LFYULz zJH88iy!$&eliXqn|c%%*@N1`Cx1SA7_$c3mB=91sEL)wGx z!gf;iXrQw%MQH|2q^*Fq`;hihGmp-f4Z>=nIML!` z{HcuhI-6=0B2Gr!EeBk94m7gJ6xH!o55GDtP7_6`Gvh5FW}JIcB#V)_n#ULeH=?1d zr0woNlTAo!x7|D9y@}D-$DW!F4Eh<8n;%kS16R|gxv*dnyd>-7thAh&I&SvsdXjRV9l3_%ZR2nEkTqa zE66x4U208IDbQ47DzMov^el|X3_0gcSxihN^>qezS&E=pJ!$j>hcYMq&O*A1Pd4g9 zg9WpuCud}A2TitK(6~SPd6=@+#6Lu@Hoc*y~mQR=T}JSTd-oO@(_y zCn}_=k{ez$=S0sg@i~Ov2#jaeuAc9LSrb)|lV7A1zt*h5!e*`-a0E%W7@SO@o?_T~ z*;t9_ZL_tI6X8!zCj&K3yG%z`TD}l!qD<8`p9xo_>R)0Z8qntjLqYgX3oG{dy+9_1 zKCLQ?yIM)SolmVN7FW0yuQ}v;RlF{FkT6o0)GZm4xDMhm%;1L?32A+REB`gYB?f=D z3QuONwXs59*yv)x)`Y`k-o&Z8l?dGa1oB5)|lhhRF)O;9p6Buh*_6_2* zN`^>8Tp(Frce;c5)dDMcjdNEyEu@KTe!;cKaXG}JI&xH9iu98FsfzaBJAx9rT8KT|bMQ_kIoEwle&`bk5n=m@HE|7-^i7Sz=?Gl9NBY~sYmi+Fi0tqGmjRJwduWzk( z{t(vg^==7G9p5@Kn?x${%q}3U>)IVReeL{Fzv@Ic{U-7B!;KXNFvmHqlx)CkwBP)J zcbj?W0_&&P;0HLz6-|M8LEcVVz({ui&c#ES7H(g?x`>ymU1ZDc2)^Q*XiKVQb!eq6 zn|$qnUrs_9?}SYBqo4$ZV+cutxi{d1JeZ@T7=^0{Ne4l)H$oX7gvlo?ivSY}ko2RV z#%CdTCn05@1ayH>+Sf@o0G0_ML>pn1UxFw7C@ewYB7zg7FFXfebx3edCxKlcq91JR zT4?Q^kopzZ5>THRIO!w=?1vZ&!#n~3^(+K?&x8{I%am}urHaJTx*BMSw924?$#lZSvfU8lV_6z?roaa*5+_q0%7P!~b zqR*SK4-7%QHY#_!B1NCOFh9Ucz3uYq@}C<}feh@K`!@l91pH?#{L0NPBw9c~ChbS= zzQ!BOd)E!wT2H@&Z*0pG4k!3_ztl54egBgKh~MDs`ZdVLO~{Eln`nzev!1)gn33vL zd1P1qI?V^%KfTglXe*UsyPoqW>70)IpC_IF%Pakbx7pvd?bq2+N47x@co6-Zf`o^2 zy5Jd!Ay{@u#m`Ysk_lyEszTdS^7%{#@Y9Gan)BIah{xDnbn9J3^tfGCz_f$u^^2A3 z?U|G@R4}B~iy^cTJwK1#O9z}qB^DnSkU%qRrQblUlDLWX)oVzw&;vbm7k{#blrQS& zY3VV`jtqnP6w0fO)fVv&hDF6FED!}v-JgVDN+zih`*i1V=a2YGCh18BXx)!x*tQjF z^75pRuGEV2+_NjXk&BpE2#S=S0k1Z0^mWhIx!DSeA+qL)=_J7Zo~7e!<&%?Jx(V+Y6HeBg#5x~!|XUU^8C>#wO>Kd(T=JoaWZwqHQ)bvtb4@6c1S zVeM);8tTRRd;QdvU1UghbZb|v)B~nWy=B5gH3ZavqNa;L@A(&gkM~XE)Q2NH9gmvsZmu3mm!jl8 zM)QZ;yf5v#vF5fBI*Wd<29U3BxRV}h1LV66U8_=@>%IXY;PC8k-_8UCHOarmRIa8b zypv-6VRMAc}hdsbC%XcDw9oT=pmy*2s<9Wr$v#2L@5@`7Wa7|nf zS}n*a>e^utKOD#63g*884f}Du6iMD2!nYR75@KdDTI0l7_xIWd@Is|<8&sMMI*bu9TsU(ipFIW@7rCz8+k09pS`*(M3? zv`Iku{=7Sx?SKO1Ige8r!KN;GHO_0yD)=()I)66yXtirZ&hE4-4UV1u!JsF?j!b6| z>6Vd@7A7pH$3Fi2L%4k@;`BriRHJfYl^^zZ0wSGSe$*)Oo2uG`bLcNB^)m93-$O(4 zkZE+GVm3Nt+9G!$cSO)_k^-6lEE`pjp~_CdwESW0{5|TQvErCEZ6Mvn+KxDgPUM-Q zSd@P>`3LuWoxMS4yaejDMqI~BFIjFKL#mXnE3Rh!fJa*u@FIyVh+demLo{@eZ6jIOK)xCY>G#wU$dr=CY zZ7U(+VIEq32bGPpyMq(EHljoh^&2ygEU(T)sa)6#O6=-FRrU$>HhcSK^0Y~ea%zPf-!mxEx%u%sjMDV(i% z7cLByOX!|`b*Sw`?CA|e{wWZUp|9Y|ku;a_N$>6wbjjjxT5JjJb*pLI#yJdEp*V6_ zl@Vs&lZ0&>$l5E2ukX2#iWl0KSs3RM%hwe84vkJ}r7&$NXJ4!7n~^6SXYI~d3Cvb{ zQ!zrEm8J4I8}opUZF0bE!jy4bra_Ilws@jPOc`dG9@SS&f`_r^c$xYsjeWByI~!y0 z%zy2S@Mqh*CR=I8PBB`Hktvk;+}Gm9#Z3(Jczn-8FzTf9I*XYfM%8P&;odR`&u;E# zFTN>`ZMklaY>)N+*6c`tAj{i0+Zz=tVZi%co&}g4e;;Rh;?#@h=)^*Vg2}~5WMqBi zH#bsWs^m`+y#_}h47dY`^6-+26FitacgQ$S|@4_f@{a#ZHJa(rp@z#~DXdP{F zPO^8-KwyS}1F5-T4Y{jznR>B3)e`5Kz`BsddV;N5VYzP|oOgx2gBkt)WSD}$*w`Gu ztDpGFCF~u4hDj%Qk7^Tx;vYuA^Vs(`E60VZBz^t+ey#_GNAfH34q_B>W<$&iVioV; z(cr=`q&@fb8H_kshs7k5V%f5uRz+BE9yELC5cHKCkF{0z6Rd1?+Yn**CZHJY)QnMB zIb%=NCR1@ipP-j02?&EgxddtRWRlcs5U4260sK_Q)89jGLCEw&mvj^Wj--Zz}n2VK+NS#h=eA=M&%mfkaYycr zvn5*NUUxW=HqLR%neMt;%8Ea})#nD`e=-bXn2_`Cp9=twe>mnpIokT~ef_umoXUj! zx*+N%$qj;rrW`42ND~z`Ou4vKp?dY8SFL@rWp*UbpBFIK`a z%(8^hAJTC!H|^VoVUe08XP{M^f9R*V4`+2|l`s{MG*-%!Z+Bmf6i>WE!WPMw5T3pJ zy2-`mhAo$NS006}7sdq1d$y?DZP5pAm!>=JCsssx!?}h38Bu_`70^$BXzKwq{yN58 zQrEA1`u{3B3#huXq;2DF!JUh{ySuwPgkZrnxVr~;cXx;28XQ7^5Zv7%XnxW?J@l~p z|0Z)-3l3}D{oG=6?v~nB^|ltPu;eja>Qqv+o|e&eIS1EV?mIfy5T?kA-FlWhY~38g zL$Lm^+W)MCGF3AvRa#@fTa@12KIbhfFD@8{@XntgZ|DOpkQfW{VVkD zUoIH+dwrb2H(A16c)-U|`!WsBemla4sCjHG-WEnOB` z&LUAH$q4(nLpD7;d?>?}B26Y%hg2B#ey~2dMDwC1LYcArmM`#$ZmRHZ>`X)`N1pVX z4!s4uQ%pftTd=a=g&b z_~HUftvqlWTzV-ILz(&8FcBD&h5mCSbnO(|@pG~iDZSiAp{d&2XRkc$xX^c&jd74K zT2W?&-HxSB#xm5>^;6s*W*J8@!8{elF)tFgRj6APb1QFw43sMd+{$I$g5^)DY=0m>!gF)DIllTzYK~8Z<_Ph<`tr=&4t={p zQ`r=nW=jzaTMC#5gN++Dh*ps$fga5;JSy{}nQ9*~FE%rccom$5D=%A_g&GY!y&VlB zoD+O+;_(%dlly`Y}Pk7hS&Y7X!2Ti7c5mF7*V##Dz;EJ9U|xST-M z5O0;+x)Gq7b*qRhS8&fMGoNJ37_ZT~@B|moiZWa^8*uj!Fii{=wX$;i&&^Yh51%@9 zn9^u=tIE)y3{RE8P;C{_FTJ$6lPdT*iFx|I zF=L{pQNv-W8{1HhSr)@bWJ&!Sp^p`=c%?k8PPuP-GH>qAo363SA&P#c2p8ZT5s67qh_p1>bC z8cm`RXQr`SK3-v}&sJr+dsJQed~iH~)4wCFK7TW)c`3K+WIzYqcWfVQHv8FlNvP7x zO%%JGVohyJ zOM^CGKcxveVIT1Lp5#uQZ-2C%34_}0JbHW|83g7#-q`Ts8@S~d8YJY)?e03R=H~ZV zk??sg6EZ2npcmeN8tEJ5Zx})nK|AF@lHt@O>(kiUBPiuxx(v~pM7Gct$rQi!8FYTB z&q@3yoqSJ5mitgDILD!@p?Y?)pSD_)z?p{>Y#J5JUIEHT3of4$$_SSW1>Wb98@gMg91>84ptibrzL-^vp0cnwk%V&k^^OGw9j^=PqM*)fP7od86IST0W zO_bn{FN6R@i=ix(2s8*M9T*ceL@t;w4@ibM4$#5`-cE^610cE)5KRsy(0-jS%oYrD z8j=6#^9?gQ8gY_&l6MLydJY7`TrYW3paL2@8Sjk{JY-I0JI$B8cg1UfFFV=y9-zg< z2iZ|z*{MC3jgUDVBr-ON>C4w|-SmCO%isY~_JfH?A=qH{Qc(FM5V;V(?eH1S*g#n8 zQD-{ajo0rGFJ|y{pT|xk!;Eft36QD#FA?%~$$Y2X=2hLL(X<@Orl&FluoIgKs*Z)@ zt0{be$87C3g&GY1 zzIz^{TPYBwmz$RD$;|(u&V66A75mZw{|EhPBbR^EtY&-h_*#J@dR4|n$UHLLmTS5< zmT`lhX&)0`5C&3U_%5sdbleY&H84-viFY0;9fEdG7!7Ceo)RlP>(16J&MtPPq8BXR zjHe&nCbG>2kR}@3`@hbAy5rq`6Z-^7PMCsj%tbfj-=IBqyeNEpxJCf{GJpT!uL@_% zVR#Ome|WCL^*d|5f6w2))_Mi%y1$%No=!dwkY5o4Gtii>53Q1MxFvwtuimwZX2JF6 z;#I`bNH~UBVov5#L}w4BT0eeEL_cbD^2DsQgbgC?j^;O{-s_wvr4-EL94T}i z=WXBQopZc8mi_cm(fO?fHJCH2r$i!EBV=V+GpEM(VHfShd>q-5?iPgo6-K7?% zUCX%l@W?@m;dIh5!;4l{uDMrqE;pFaHYM1(v28fla zk57w6=`9NBeS;X0*jJxDcFgk{CtIhAKbX(9pxbWO7{q#{l!$c49i2_kj|*y*C}p@V zF%W$|+aGb}e{e(iY+j*fF-uYAODl8Ac=oC3t*r1f9(*r8-g0_wk~=e%y|Hw%x=8Cyf&G54m1s zLR`I_16H4p}giN#O-k81YGqyzrWjmcmV0Cj7hSMK=oCCr?I*KIV zLpgmrnq?a${cwhbeTUz40Cv6GbQ1OTi3{rho(9)%hNuKs7@~(@&v&Wa)A7{y^5kgs zM!j2}`z=lPjQ29{k|Y*^74?uGdse+JXeRBD1_NSsPt?=>j36X7*Ve410%v3GVX=-*=g0r`P_^=Ks z652#ZAwWz4OANA{_e;lk5-axq%!A5s)?R48@yN*$Os?fX*7vU!;NiUw4FKOo9IZnsW-?E!@C3*XqzP za?ji#>I-L!ME9ic`zgCnk*AebQh!h(=it`pRG{=QwE7sA;FQ}Y#-C7VMDKla)q~f* zm}8|lWWc9SQwOWl>YEwPUbANp>S1F7bFiD(e;qnqcpNJPCrZox1HBHfxO<*{?a}*X z=>4^I8vo$lqWwJd+B`?W{7!uOUqi3RzX~B{Bw9H?pI;CDjLToL!q$SaLOlfrU*!1$ z0fzdX77UvK>DweZrJr5fQloaP?EDg{62bC@I1s-tJ&$b^zR37gQs%~v0)LR3sZ*LI zoAw*dU~cE*<(3=vn{k=DMScE9xK*%@ePMpS?R5x@5uNXw>nL>Ac6Qo5MT$cd;&xER z&{@L@M&*~n{iR^CJ*g2Nuy7RNgpz6~H=-iKB1+->xo2~WH!8uD{raotre$pDmQVi8G|m)eX%bjmA~8oP6?-!n(=^FMePnMh-(i>4Kq6Y{1Yv@I<8L^9-hZ0IP7i8Fr(N2gsb)24m zR?{XuC|7p0UQ)!Pw(+&tGS4zZyS*=OkTaq9} zIzb5zWCVV?{V_qNN7GnVVb;Ix|u zqaTtuJY37r;l%Y?==aOT8;uysPdl@}|v? zQ`_YHQ;asQaU1)ox{Xw&x|QE>9CMKI96oMzmFl7k?!xB>FtXIpu3cbubR}K3HsFXQ z$tpv;NhDutIqC5%-ZeVJYKF!-U1sUQHJHqYS!<{_6rS|k=E~+Y&D$5Q$9|18jRqc&MCUu5Sn;Lzc*-`zUgi> zJU#UOP|_RmTBA7~us|JQ$RWwJ&9REQyu)Am1E^@JUwIR6eR*#b@vXd8SzeD@#8+I5 zH^@;*IKCEGHKakzz5qi0p<#jOy6#^$W?Bv=7}1ItMnp&?hma|7U@34A(D#DlGpXO{ z0K{}d!M=bu{6mg_Ar%IRKE(4k6_ke{v5tb{;C`1s1jBp*JN|-h4**gv2TzRXc-UB2 zu)QmP8ZbW{D2V5q@7b&)Z9e(B(cvmr(IKqT#1qUSfa$7TZv@v{$~*iE${m>SAy5{O zCcqloqn-BkDSXS+MNblZYtjX>XS>XpU2J@N*L0kk2BZe@YJ;v%2CV-3f{jGW1L$TU z?8o^QV@i7(NIk-Ee1og@9{M~_sQ2E(eZd~v27~FRDf(;Mj$}{!%(&Sm4%A*Kk4xW&B1lJS^rCRY|gu>Gn*2EXKlVq~>I{9=j zBpu3hn{%XKh5%psDCUvr@VE#_v;#0ZBWPXLsX5x}mNIg@a zbl-SCGGDnaMFXEU@*y#VJOQ~46zc){HHK!PrPD$RYaW6s;UFO6XuCDzLjjPGgK{A3 zeHx;yb0`dRG+W5;l}QkOs}EyM%i$Tz<4?C|W+%NDA__=UZbV*_WK)R76rscESm4egovkWwZ)g?(Ty)J z_umj_SOsc%y<58Xu($KbKHH?L7|!g|!mqQo>+NXO$R}IL;iCXqA$Al5=dQNZ(DLU#tYju|6MbbYG<3srbDf6LfYn zw4N;@!Z)C^YHHXE!c+wpJ4Hv?WM?-nG3Z|U^%@^gSvE9A(Hwt;qqC+(RH9O@pbe>a zgPyQtATHrKzua{RXyCE#r(Fq^RaR+A!h;* zd#96}&lHM3@dY>26hT8yOsk-81W+}~P4EMO@G~}Lss)>W_r9zTlqfd*aE2ullyDL; zXTT`01&7^!5ZmF;(veN&O0sY#p3OmD6OA*6@c;@F!u?pux59c#jr(mls1!SBpMnK_ zt?jgX?eQRLgirFU`5;@OhZnn;?6}$4R4OJTDH0DU39?Ef%*$98nR=_lja%P5P*dbS zI%l~B+jys2?kMfM;h`M3{R9pxdjeK8dw(FJBbG zUn`pT=o&XoU}k29OG^v5q76x*fj@y{S5>(ets=ipT0w>juTYHd7-5Ijrd1WBRk0nG z>p5F|0RPYB7+}Tup5*z&qwl%4_V0SK#jFkgT8zaXC=vg$7=uOW={mMoRyQzEXADSC ze4`7l2xY|Hrn3&ApuWTbCybdaqr{9-dMbNKSuZ916)`c(6PG~X(b*KF1x__FpJSV;m+~r?Tt+*sD?lT0r5N%5q+O9AwIOCgdyrjWfvwNS<8Z&$PCmlN{_^z8B{4M zrx2{5gzZ8+em zL$|YX0h-R=dvg5N#!xm!C-HhKb_=@dmOjV&JrU2rIZYgJVqb>3=CCgCC^JlNE7^jU zy>q>kOl1{ME}&9VupGc28x<3k-!ua(xisLQQkKq?e2_LloD zQ87t>Lp6`?^VeHZ!O=I2+!oGyHnTQ0GhQuCxSy!0Be*nR;4b3vnW7HscPxcXlxnFf z->~pNct_vrPZ_ge5zZ87^)gqq(<(q}i*wL>u(XHGvB}@Lh!GB zgX?bWWWT^ik{QI*p(;25nhXOW(wpdi;kK|zSfW%XN?fPBMM9dC&Kx{fl%~|50|6_J zO~s*PSKd7k8l*hQaiOnWLwr2m9ZH%gwiT;8BYi&bZH0BhtU52c95GF*TgJVNg_vgS znvODg-yk+8b@-uITz>V-=} zmP68I-=475<*QnPCgx=tC&+yQS6!F(TTpp&Ti0&UXDx(Kn}<_ezBxtpeWDW4<#U>V z(pMJ~Ah0&XrMG)x%Ie0{TjOt&87J?tW5Qi9vrkWK70YUC7Qf|U&B*IvOnJom{Bima z{xe^T3l4J*DEuiI(|UhDO>NEvOod?&7xxWpd=}lO8T${he9lGzXN9Vmf}>!i^DcDA zBwyj}*^xKBSR~4EjKuCl{AGdwHllugZGyEifQu=>nRT@5-R_)^OfbNWL?Rbwb4en) zDNhi232-vA<8L8ACKT=5EKV;`i?f+05e?ps0Umn@p_wy5KIaqCh=xOt%uZ(b7|7w> zC3&s>#zw=_R|W1f_}zlnml-QJzdM06{JhGBy|b1z!ICH6oQivl<}=U%j_(in!kSS{ zbPTxXWF#kWca-WS6=yKpLv`J_7aD`YsAo_UimSbMBHK)}`R$`y0sUTGGGXnC1hwsq zY89%?XI7zg#^b>`54`|8G=ee>MNO<#Wz8B@&ESUWLf9n89xlfu$FvacnBdsB#Dl*V zzy0NTv#~R241TWClKy;p_Pd_9KgOFsPFYo-YqT(6cF6C0Gw{mnvAC}52>1yWNP){n z*j0T0B0YvXSeqdMe#AhQ4-H1nC+7kETyjyS%UAUQC-vC$bUTkkFO8urn8hn=$Md26 zBd+9k-gU)I2tItA{ddTzQ&$yqCOrzXgmnF&QX*|N(;5aHaPfkO5+V$+r);Vbw%5^c z99D~MIR>~ZWVLXx@xh@a$06_DZ$k;~Wv*(<` zwgT1^Z-xK{E#gBH%d71Xk3<8rFtnm|7qEE$R2{=B(NFY_Vmb&jd&$_(whwfTFys7t zkyM?)p`%T1*{*$628wm|kJ+Xlw{{Qf6khI_olj`qJnw|lm{6ifFqRB_)A(+^oKEf8 zZW(zWdAL(#R(S83Z&~hbt5MrvP21QL(~KWxZcKwasohAg)av2}>t^Vk%rHz26%)Q* z=UzajdU>J{{M3;;hTz#6XRqVjbjN4a9_GwI|I90&m`kS8WB>LiE+5Q1Qu+9l@dynW z^E>RKDg(F=9)X#1`~6CSiL$C;_U&7TxrK+kA*EY1Dpq7)XXbQ6Y(ig(yx zvu6u*1<++IrRkkqRZNK&-MYsbtqEyrgZvZbboCgjr4LD)T%kTqGo3oR^q&hIb7h>idl&c7{hV~E9o3Kpo66wc&&?Vqn>p;H69N%LJE|edYxB{Lw?KQE$3yr=| zYa1AZttQ*@WKQ&C&!K7FE~_0BH78&yKMr~!!?iDMOR6zEUAkZb zj-?G)dC`GG#`6Q(g0`~|L8UwULcK{-ayXBG266%AgCwA!@%|@tM1Q5QWWo%U5JYF^ zf6kzNL8vO#&ok)2bJ?@sdZO*E9A8pm6Rn=Zfu6k?C?GgJLS`^uit^%%f&|jOp;rhg zN(m_U`om93X&Wri7#P%rw&7S#(&uIgO-vEr^=w%1$Ge>vK@Xd3oI#O0Z;y|Dx?y)d zmO0cYn2+4x)ayHC3Zgfh4>#b4 zknI-4<$|G!;6P9`vdiyMu`OQ}c{|C9t6b*d!tE_6xSbn{Z$Xy$~-^S{lH8bv~ zbUhSz`YO#boN;HAb{|tui-p>9mD<$?EaaLYzHN;kuc$(M?U%>kXyYh7ZHT3Bbn#G`St!pDH-F>J_%%bCG(Y)|j>I#A38A8CxjOLYJp=Thuc_-Hj{K22Hd;f>p>cre$1+s@qKB~s0S zi>=Z;oHDY!GB3&RCMak&8+d4W%{lKP+&5^*G-PU%-_?Y$0tZTa%hMxO!{8W$qoL_{ z=U`R3r?%`aM9{l~y9)VxU|r|8sFw`|p5q^B7NL(p45Kwu@u;Y#=a#Nopj9a-+XdNx zSw9Wh+t{_)*;?-6>+*0KCC<3snk1WE60hjc^1PJdPXF zfsAJ4Cq4=E6Y&Qi3JESFLWV*Jq7Q8wKt|gUYzk6HI3sOtC`2Rn2)6nIuxd5;fSA_& zJuqRWQNV6lP>uL-^U0xNiPIVo0C9XnLKGp$U<+{Iu9yh9V1kW9CT*ZY@rbn{A1C`e z`hXgAS)3E^z-zw9lO%XQ9ZGIjAgOMG?633)sy=5j z5%UAT_lwRw0w|?<@Hpe4eq-@wr?fjnX6!Yb@a4t_kT#XGiMp-wIG6HCP3?7&7MJfi+QrZ=WLMVbS90SRSfncitEOW$Vi%Gk&fCM!4heD}+XDI|UTM8Kk6xa%pod}Jl5mWP&x=#*5M zZ?e`wrEImD_M*FZ5yhVbWL#s=Dv zFp?|!=u>s)zQsVT#rA@ngebTCbY+&SfqS(S7Li*&@jdR+hne6uT_V&;q!=QMm|>MA zKPI-=P5FfTNX^EoVn*z)At;Rg(}Oh8d^|;1J`oHJqNWJPx*aMYCFM|&5ZKn)-3LD} zxYw(4|7!B#@bd1U|6!vlEsj3CY~^Bv-~!S6N!L@~gWESE&OT`5J=|k|1slJ z4(#ljGqOsX0@OZgA*|eU<2nx)bB2b&(wL%BJumDsl>}p;wvoldQT%kmkM=VQ**hk5L7wNDaP9`AJI=t^XfR3 zFOsH(-nWY6^!8s~cJLWO+1S?Jud>bfsU3V(8o931D$%TUEV?uNHgQE~q@E;yD}_IZ z@Ch=3nZTYe@F%c1e(;#(^YS1`%nZu3q>A3D?)YmXR~^oJ0F>lfFv4gpZX4O>(L5Ox zs`g4O9+#i50)};Y@WrO@Nzic1{RiU~d1hd?6LC{Nh z3$JS<(@WyU{D=yW%N5L(%q8_F?4^b_!R=+cvR4wbMj`fb|tkk&~Mr_3<8brHIbVQ7%H(Y8k51pMq3>G?iB{xu}U=-JPh>>)jF%a_eX=I8u+Wz#Fq0(h8>b*Ka+M>{FICl4ZkUq>w;*f7rc|TI~AoMeT#=~ z^qxE$)C9!3oBKVlj1LSfbhG5UnCFyCV`OR)HOcZA7mVdzf_+iykx0Y5(3`j8%qgA~ z`@F*2h+bzV^sIRFtI?Uc=hUsJ;8PXdjs_kCHOdU&undsuc03<#Ora{fKRnPxY%``W zVW!EiV#u#WVx;K3b4%GnD^yR>Gjz)^D-SI?E5>9$ie&zw`svEzeQ#~v1CXh4y>xL^ zS*L)6tZcfV2>ef&Ddy-|l|#67e%IqP3S}tBXpt5Km_i8y1$bI$ejpF1CPnGfH&3EJ zx>>)}qbqttYz-=A7n^>^bcl*bKk3rlZuf5!uGe1T0Nnx+J}Xb#&2xRT{isU=5^3#r z6~Br?I7EVIuMK4{563j@|6MSv4Hys(x2a4h;Ro454t6U87rQEWoHwBcG=vP=LJuZ+ z4nPb5XupdlK|F`@tOW*)z!_;nG4=az1^^KI0LnZP_?~=-K$->sZlP#1{CohID+NT# zwqV%q1r3lj8m{39uj;YuGFi)Np$SBg62i;G^B^s1aLJkgjO)xWW!T@N9 z3v?ln7dT|pza7bMv*rQ>DFxCslusNOa2chvPCoxMNgAz*FM{FoHF834E=B8)n z&D^%<@;3!{ghiv;O2VdZ;OSBK8MKc*EIuda(TT)^VE#td-x^dFHw7dl1A|-KOVhBLCu8w3 zNU>TCx;hxLt1+&ewOGY({^0IZs8ljKrdGH^&Fs8wx=l3`xj#=uB*EDb;$JfNIq%za z-0Yx*v`=e9XI_t7=}&S!z4!HrO6#Xa-*r?4FHsD5AN${-l&h1&Jg&K$6+pLz%t72Q zJ_UPKUkGb0o~6nqo$gO9gnHX~csi~Uw8z0*R_;|=e~Y8Zn~^U4;c#WfIlpxG!FAi4 zS3ONpzk#jwK~i>Bt=b(Q7yirD?y|RMfs}T%toA1V_tvLca{9hLBr0+Ly0d8GaH}&& zxa*GlUPCw9uWy^6@wnVC8_t}QUEzx!r}~@fJLE1V#Sj>Hs4});ei~thR`PeA1^d^B z6dYPJ{kZY{+8rdy%>Erw-ioYm=>&(j|2=;s&g` zA~gX7By>)Jcu*M(=|!4xN-#20GBUhx($1b9t{x$QEPJhCVyjaEz;=y}V_U>c!bjOs z?(OD7d;K|hjH*|m7FY8stMPi7xPxUO4mtftJD%g`*q7)CWJT+ro|Z-sJ8`nG`U)ws zODzu~I@j+)(u6-9eGB6B7zGHniF?p6q}vX1FxO z3$Z5EFaoHxfmd*8F-~58&vgua4}KB}rfYolCWe@z(wJ#I6C1(byv!!@ioJ68z+*p? zkC*cc{0!PP@CocE^5zm}q>{a;XgW?*Yw`6RYE@NGNmDhY;`A!OcslIQ_rV3 z@5q^D%Y?2^h5Vrb%&?5^hZBLd-om4N7eykPScTudemM>Y^@qqF9$Vy2^W$Szm9g;k8xt~A*9p-N1u?TjcdzTdU?xHXsRlfTtVbUCmF#4`3k`&21hnfnkxb!ySN`~1U>R#Bi>3?+GPpZ6Nq?9 z;chD61{Gs~)NzOsh5EtbBgUlL=2;~8#4v9A2t~CFaTDVghTJV91%{rZYDjognQFf$ zVBI&FVZkxUGyXcJR@cxr!-4)qszPg)71dicp1^!BM=h;W?kTgwO4{!OC$S$Abbu8p zIMeLmmL@HCH(h?u!p_FSqqQzt2&DdtraMozt;x|^>j{I@ zt*yrG@XOlYqKz4r6nLwO24ljlmxk=nA_Zeon&d2JLI&KeqDqk*e1@NxJhG(1p!})5 zkBJ!?YFi3i7v<-3xE3%7D(Lfa;Qymc{9L){`9cCZ68!b^-{Ql6>JM1Z z<@-`UfB$#Wzv&kL{mp+xi~aHPe|>v?8vk|udh?s-`#;r!|9a2os)Vmv{L%~l^ZL~S z>-mxX)#6|3!7t7JNk90dnZVzh89XQP{HZ4V(){(i{?ZeEX>RjR&Ht`0{Qn05{^I=6 z+r|Gk=wE8Xf6@Mw8houc{1-6acl-aQ{YqB)oBHs}zvWNvYYD>_?!j}P|GSg_>aCYQ z_ZRn%#JT?zGTwf|n%u-|+v`@2?A~ zzR-&(evkg|#p2)lkf;~9 zi_Y)CUjn3F8~!@{;f1~X_J3gili9D&pFJ6t6!herjE7j%Tv@1y@T X8vNP!00cz*{5AX>oRIAD>$m?0gzC(} literal 0 HcmV?d00001 diff --git a/dependence/cas-client-core-3.2.1.jar b/dependence/cas-client-core-3.2.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..c97b6b135ed5c74aa95d42bd9877780b586b0d07 GIT binary patch literal 87318 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 LT=6E*KZE%{%h!$C literal 0 HcmV?d00001 diff --git a/dependence/casclient.jar b/dependence/casclient.jar new file mode 100644 index 0000000000000000000000000000000000000000..02737cd6da2b779e3c3f171274a49a274b56285b GIT binary patch literal 23806 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 UZgEmk@eyAk#Ocf>2ZH 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[ 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 X8vNP!00cz*{5AX>oRIAD>$m?0gzC(} literal 0 HcmV?d00001 diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..a2e7ec9 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,21 @@ + + + com.fr.plugin.fg + + yes + 1.9.4 + 10.0~11.0 + fr.open + 2018-07-03 + + [2022-06-10]1.9.4:修复定时调度启动入参不为空

+

[2020-12-11]新增导出请求放行,可配置放行url

+

兼容FR和BI模板预览地址权限过滤

+ ]]> + com.fr.plugin.fg.auth + + + + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/fg/auth/FGAuthApi.java b/src/main/java/com/fr/plugin/fg/auth/FGAuthApi.java new file mode 100644 index 0000000..651edb9 --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/FGAuthApi.java @@ -0,0 +1,53 @@ +package com.fr.plugin.fg.auth; + +import com.fr.log.FineLoggerFactory; +import com.ytec.authAPI.interFace.AuthIF; +import com.ytec.authAPI.interFace.bean.AuthObjDtl; + +import java.util.*; + +public class FGAuthApi { + + private static final String DMNS_TYPE_ALL = "d_pf_all"; + + public static Map>> tempAuth = null; + + static { + FineLoggerFactory.getLogger().info("FGAuth:报表工程启动,开始获取模板权限"); + updateTempAuth(); + } + + public static boolean updateTempAuth(){ + Map>> menuAuthMap = new HashMap>>(); + try { + AuthIF authIF_ = AuthIF.getInstance(); + List objList = authIF_.getAuthedDmnsVlByDmnsTyp(DMNS_TYPE_ALL);//AuthObjDtl为权限详细 + if (objList.size() > 0) { + for (AuthObjDtl authObj : objList) { + Set objIDList = menuAuthMap.get(authObj.getDmnsDtl().getDmnsVlCd()) == null ? null: + menuAuthMap.get(authObj.getDmnsDtl().getDmnsVlCd()).get(authObj.getObjTyp());//authObj.getDmnsDtl()为维度值详细,包括报表ID和报表名称 + if (objIDList == null) { + Map> objAuthMap = new HashMap>(); + objAuthMap.put(AuthObjDtl.OBJ_TYP_ROLE, new HashSet()); // role + objAuthMap.put(AuthObjDtl.OBJ_TYP_USR, new HashSet()); // usr + menuAuthMap.put(authObj.getDmnsDtl().getDmnsVlCd(), objAuthMap); + objIDList = objAuthMap.get(authObj.getObjTyp());//authObj.getObjTyp()为授权对象类型,包括role和usr两种类型,平台可以针对用户或者角色进行权限设置 + } + objIDList.add(authObj.getObjId());//authObj.getObjId()既对应的授权对象ID,根据对象类型,是用户ID或者角色ID + } + //objAuthMap_ = menuAuthMap; + } else { + FineLoggerFactory.getLogger().error("FGAuth:从权限API取得菜单权限失败"); + return false; + } + //lastUpdateTime_ = typeInfo.getLatestUpdateTime(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("FGAuth:从权限API更新·权限设置失败", e); + return false; + } + + FineLoggerFactory.getLogger().info("FGAuth:读取到的模板权限为 " + menuAuthMap); + tempAuth = menuAuthMap; + return true; + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncJob.java b/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncJob.java new file mode 100644 index 0000000..ef1122f --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncJob.java @@ -0,0 +1,17 @@ +package com.fr.plugin.fg.auth; + +import com.fr.cluster.core.ClusterNode; +import com.fr.log.FineLoggerFactory; +import com.fr.scheduler.job.FineScheduleJob; +import com.fr.third.v2.org.quartz.JobExecutionContext; + +public class TempAuthSyncJob extends FineScheduleJob { + @Override + public void run(JobExecutionContext jobExecutionContext, ClusterNode clusterNode){ + if (FGAuthApi.updateTempAuth()) { + FineLoggerFactory.getLogger().info("FGAuth:定时任务更新完成······"); + } else { + FineLoggerFactory.getLogger().info("FGAuth:定时任务更新失败······"); + } + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncSchedule.java b/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncSchedule.java new file mode 100644 index 0000000..0e4711b --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/TempAuthSyncSchedule.java @@ -0,0 +1,44 @@ +package com.fr.plugin.fg.auth; + +import com.fr.log.FineLoggerFactory; +import com.fr.scheduler.QuartzContext; +import com.fr.scheduler.ScheduleJobManager; +import com.fr.third.v2.org.quartz.JobKey; +import com.fr.third.v2.org.quartz.SimpleScheduleBuilder; +import com.fr.third.v2.org.quartz.TriggerBuilder; + +import java.util.Map; + +public class TempAuthSyncSchedule { + + private static Long syncTime = 10000L; + private static String scheduleName = "FGTempAuthSync"; + + public static void startSchedule(String jobName, String jobGroup, Map parameters) throws Exception { + JobKey jobKey = new JobKey(jobName, jobGroup); + if (QuartzContext.getInstance().getScheduler().checkExists(jobKey)) { + ScheduleJobManager.getInstance().removeJob(jobKey.getName(), jobKey.getGroup()); + } + + TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger(); + triggerBuilder.forJob(jobKey.getName(), jobKey.getGroup()) + .withIdentity(jobKey.getName(), jobKey.getGroup()) + .startNow(); + + SimpleScheduleBuilder schedule = SimpleScheduleBuilder.simpleSchedule(); + schedule.withMisfireHandlingInstructionNextWithExistingCount(); + schedule.withIntervalInMilliseconds(syncTime); + schedule.repeatForever(); + triggerBuilder.withSchedule(schedule); + + ScheduleJobManager.getInstance().addJob( + jobKey.getName(), + jobKey.getGroup(), + scheduleName, + TempAuthSyncJob.class, + triggerBuilder.build(), + parameters); + + FineLoggerFactory.getLogger().info("FGAuth:定时任务已启动完成,执行频率为 " + syncTime/1000 + "秒"); + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/filter/CasYaleFilter.java b/src/main/java/com/fr/plugin/fg/auth/filter/CasYaleFilter.java new file mode 100644 index 0000000..87f81ea --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/filter/CasYaleFilter.java @@ -0,0 +1,202 @@ +package com.fr.plugin.fg.auth.filter; + +import com.fr.data.NetworkHelper; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.io.utils.ResourceIOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.web.utils.WebUtils; +import edu.yale.its.tp.cas.client.ProxyTicketValidator; +import edu.yale.its.tp.cas.client.Util; +import edu.yale.its.tp.cas.client.filter.CASFilterRequestWrapper; +import org.xml.sax.SAXException; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.Properties; +import java.util.StringTokenizer; + +public class CasYaleFilter extends AbstractGlobalRequestFilterProvider { + + public static final String CAS_FILTER_USER = "edu.yale.its.tp.cas.client.filter.user"; + public static String IGNORE_URL; + private String casLogin; + private String casValidate; + private String casAuthorizedProxy; + private String casServiceUrl; + private String casRenew; + private String casServerName; + private boolean wrapRequest; + + private Properties properties = new Properties(); + + @Override + public String filterName() { + return "cas"; + } + + @Override + public String[] urlPatterns() { + return new String[]{ "/*"}; + } + + @Override + public void init(FilterConfig filterConfig) { + try { + properties.load(ResourceIOUtils.read("/resources/fgAuth.properties")); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getLocalizedMessage(), e); + } + this.casLogin = properties.getProperty("loginUrl"); + this.casValidate = properties.getProperty("validateUrl"); + + this.casServerName = properties.getProperty("serverName"); + + this.IGNORE_URL = properties.getProperty("ignoreUrl"); // 逗号分隔 + FineLoggerFactory.getLogger().debug("IGNORE_URL: {}", IGNORE_URL); + } + + @Override + public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { + try { + if (isIgnoreRequest(request)) { + filterChain.doFilter(request, response); + return; + } + + if (this.wrapRequest) { + request = new CASFilterRequestWrapper((HttpServletRequest)request); + } + + HttpSession var4 = ((HttpServletRequest)request).getSession(); + if (var4 != null && var4.getAttribute("edu.yale.its.tp.cas.client.filter.user") != null) { + filterChain.doFilter((ServletRequest)request, response); + } else { + String var5 = ((ServletRequest)request).getParameter("ticket"); + if (var5 != null && !var5.equals("")) { + String var6 = this.getAuthenticatedUser((HttpServletRequest)request); + if (var6 == null) { + throw new ServletException("Unexpected CAS authentication error"); + } else { + if (var4 != null) { + var4.setAttribute("edu.yale.its.tp.cas.client.filter.user", var6); + } + + filterChain.doFilter((ServletRequest)request, response); + } + } else if (this.casLogin == null) { + throw new ServletException("When CASFilter protects pages that do not receive a 'ticket' parameter, it needs a edu.yale.its.tp.cas.client.filter.loginUrl filter parameter"); + } else { + ((HttpServletResponse)response).sendRedirect(this.casLogin + "?service=" + this.getService((HttpServletRequest)request) + (this.casRenew != null && !this.casRenew.equals("") ? "&renew=" + this.casRenew : "")); + } + } + } catch (ServletException e) { + FineLoggerFactory.getLogger().error(e.getLocalizedMessage(), e); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getLocalizedMessage(), e); + } + } + + private String getAuthenticatedUser(HttpServletRequest request) throws ServletException { + ProxyTicketValidator var2 = null; + + String var4; + try { + var2 = new ProxyTicketValidator(); + var2.setCasValidateUrl(this.casValidate); + var2.setServiceTicket(request.getParameter("ticket")); + var2.setService(this.getService(request)); + var2.setRenew(Boolean.valueOf(this.casRenew)); + var2.validate(); + if (!var2.isAuthenticationSuccesful()) { + throw new ServletException("CAS authentication error: " + var2.getErrorCode() + ": " + var2.getErrorMessage()); + } else { + if (var2.getProxyList().size() != 0) { + if (this.casAuthorizedProxy == null) { + throw new ServletException("this page does not accept proxied tickets"); + } + + boolean var3 = false; + var4 = (String)var2.getProxyList().get(0); + StringTokenizer var5 = new StringTokenizer(this.casAuthorizedProxy); + + while(var5.hasMoreTokens()) { + if (var4.equals(var5.nextToken())) { + var3 = true; + break; + } + } + + if (!var3) { + throw new ServletException("unauthorized top-level proxy: '" + var2.getProxyList().get(0) + "'"); + } + } + + return var2.getUser(); + } + } catch (SAXException var6) { + var4 = ""; + if (var2 != null) { + var4 = var2.getResponse(); + } + + throw new ServletException(var6 + " " + var4); + } catch (ParserConfigurationException var7) { + throw new ServletException(var7); + } catch (IOException var8) { + throw new ServletException(var8); + } + } + + private String getService(HttpServletRequest request) throws ServletException { + if (this.casServerName == null && this.casServiceUrl == null) { + throw new ServletException("need one of the following configuration parameters: edu.yale.its.tp.cas.client.filter.serviceUrl or edu.yale.its.tp.cas.client.filter.serverName"); + } else { + return this.casServiceUrl != null ? URLEncoder.encode(this.casServiceUrl) : Util.getService(request, this.casServerName); + } + } + + @Override + public void destroy() { + + } + + public static boolean isIgnoreRequest(HttpServletRequest request) { + if (request.getRequestURI().contains("remote") || + isMobile(request) || + StringUtils.isNotBlank(WebUtils.getHTTPRequestParameter(request, "format"))) { + return true; + } + + String[] ignores = IGNORE_URL.split(","); + FineLoggerFactory.getLogger().info("isIgnoreRequest uri: {}", request.getRequestURI()); + for (String ignore:ignores) { + if (request.getRequestURI().contains(ignore)) { + return true; + } + } + + return false; + } + + public static boolean isMobile(HttpServletRequest req) { + String[] mobileArray = {"iPhone", "iPad", "android", "windows phone", "xiaomi"}; + String userAgent = req.getHeader("user-agent"); + if (userAgent != null && userAgent.toUpperCase().contains("MOBILE")) { + for(String mobile : mobileArray) { + if(userAgent.toUpperCase().contains(mobile.toUpperCase())) { + return true; + } + } + } + return NetworkHelper.getDevice(req).isMobile(); + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/filter/CheckTempleteAuth.java b/src/main/java/com/fr/plugin/fg/auth/filter/CheckTempleteAuth.java new file mode 100644 index 0000000..92562b9 --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/filter/CheckTempleteAuth.java @@ -0,0 +1,164 @@ +package com.fr.plugin.fg.auth.filter; + +import com.fr.data.NetworkHelper; +import com.fr.decision.authority.data.User; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.utils.WebServiceUtils; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.TokenResource; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.general.ComparatorUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.fg.auth.TempAuthSyncSchedule; +import com.fr.plugin.transform.ExecuteFunctionRecord; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.security.JwtUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.web.Device; +import com.fr.web.utils.WebUtils; +import com.ytec.authAPI.interFace.AuthIF; +import com.ytec.authAPI.interFace.bean.AuthObjDtl; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.fr.plugin.fg.auth.FGAuthApi.tempAuth; + +@FunctionRecorder +public class CheckTempleteAuth extends AbstractGlobalRequestFilterProvider{ + + private String name = "fineFgAuth"; + private String cpt_path = "/decision/view/report"; + private String frm_path = "/decision/view/form"; + private String bi_path = "/decision/v5/design/report/"; + + @Override + public String filterName() { + return name; + } + + @Override + public String[] urlPatterns() { + return new String[]{cpt_path, frm_path, bi_path}; + } + + @Override + public void init(FilterConfig filterConfig) { + super.init(filterConfig); + try { + FineLoggerFactory.getLogger().info("FGAuth:Schedule开始启动"); + TempAuthSyncSchedule.startSchedule(name, name, new HashMap()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("FGAuth:Schedule启动失败" + e.getMessage(), e); + } + } + + @ExecuteFunctionRecord + @Override + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { + try { + + // 未登录请求 直接放行 + if (!LoginService.getInstance().isLogged(req)) { + filterChain.doFilter(req, res); + return; + } + + String viewlet = WebUtils.getHTTPRequestParameter(req, "viewlet"); + // 客户报表分两类, 以【我的报表】开头的报表走验证, 其他的都不走验证 + if ((StringUtils.isNotBlank(viewlet) && viewlet.startsWith("我的报表")) || isBiViewUrl(req)) { + //String userName = getUser(req); + String userName = LoginService.getInstance().getCurrentUserNameFromRequestCookie(req); + User user = UserService.getInstance().getUserByUserName(userName); + + FineLoggerFactory.getLogger().info("FGAuth:用户 {}, 模板名称 {}", userName, viewlet); + if (!checkUserAuth(userName, viewlet, user)) { + FineLoggerFactory.getLogger().info("FGAuth:用户 {} 没有模板权限 {}", userName, viewlet); + showError(res); + return; + } + } + + filterChain.doFilter(req, res); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("FGAuth: CheckTemplateAuth#doFilter执行异常" + e.getMessage(), e); + } + } + + private boolean isBiViewUrl(HttpServletRequest req){ + if (req.getRequestURI().contains(bi_path)) { + FineLoggerFactory.getLogger().info("FGAuth: BI的预览请求" + req.getRequestURI()); + return true; + } + return false; + } + + private void showError(HttpServletResponse res){ + try { + PrintWriter printWriter = WebUtils.createPrintWriter(res); + Map map = new HashMap<>(); + map.put("result", InterProviderFactory.getProvider().getLocText("Fine-Engine_Error_Page_Result")); + map.put("reason", InterProviderFactory.getProvider().getLocText("Fine-Engine_Report_No_Priviledege")); + map.put("solution", InterProviderFactory.getProvider().getLocText("Fine-Engine_Please_Contact_Platform_Admin")); + String page = WebServiceUtils.parseWebPageResourceSafe("com/fr/web/controller/decision/entrance/resources/unavailable.html", map); + printWriter.write(page); + printWriter.flush(); + printWriter.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("FGAuth: CheckTempleteAuth#showError执行异常" + e.getMessage(), e); + } + } + + /** + * 校验tempAuth中是否包含当前用户 + * @param userName + * @param viewlet + * @return + */ + private boolean checkUserAuth(String userName, String viewlet, User user) throws Exception { + // 超管 + if (UserService.getInstance().isAdmin(user.getId())){ + return true; + } + /** + * 只取模板的编号 + * 我的报表/dept_019/rpt_0005.frm 转换为 bi_rpt_0005 + */ + viewlet = "bi_" + viewlet.substring(viewlet.lastIndexOf("/") + 1).replace(".cpt", "").replace(".frm", ""); + if (!tempAuth.containsKey(viewlet)) { + return false; + } + + // 用户名校验 + Set userInfo = tempAuth.get(viewlet).get(AuthObjDtl.OBJ_TYP_USR); + FineLoggerFactory.getLogger().info("FGAuth: {} 的userInfo为 {}", viewlet, userInfo); + if (userInfo != null && userInfo.contains(userName)) { + return true; + } + // 角色校验 + //List roles = UserService.getInstance().getUserDetailInfoByUsername(userName).getCustomRoleNames(); + Set roles = AuthIF.getInstance().getUserRoles(userName); + Set roleInfo = tempAuth.get(viewlet).get(AuthObjDtl.OBJ_TYP_ROLE); + FineLoggerFactory.getLogger().info("FGAuth: {} 的roleInfo为 {}", viewlet, roleInfo); + FineLoggerFactory.getLogger().info("FGAuth: 当前用户 {} 的角色信息为 {}", userName, roles); + if (roles != null && roleInfo != null){ + for (String role : roles) { + if (roleInfo.contains(role)) { + return true; + } + } + } + + return false; + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/filter/FGFilter.java b/src/main/java/com/fr/plugin/fg/auth/filter/FGFilter.java new file mode 100644 index 0000000..6a2776b --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/filter/FGFilter.java @@ -0,0 +1,73 @@ +package com.fr.plugin.fg.auth.filter; + +import com.fr.data.NetworkHelper; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +public class FGFilter extends AbstractGlobalRequestFilterProvider { + + @Override + public String filterName() { + return "FGFilter"; + } + + @Override + public String[] urlPatterns() { + return new String[]{ + "/*" + }; + } + + @Override + public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { + // 远程设计 and 移动端请求放行 + try { + if (request.getRequestURI().contains("remote")) { + filterChain.doFilter(request, response); + return; + } + + if (NetworkHelper.getDevice(request).isMobile() + || "h5".equals(request.getParameter("op")) + || request.getRequestURI().contains("/weixin/single/login") + || request.getRequestURI().contains("mobile")) { + filterChain.doFilter(request, response); + return; + } + + + + + + } catch (Exception e) { + e.printStackTrace(); + } + + + } + + private static class VirtualFilterChain implements FilterChain { + private List filters; + private FilterChain originChain; + private int count; + + VirtualFilterChain(List filters, FilterChain originChain) { + this.filters = filters; + this.originChain = originChain; + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { + if (count == filters.size()) { + originChain.doFilter(servletRequest, servletResponse); + } else { + filters.get(count++).doFilter(servletRequest, servletResponse, this); + } + } + } +} diff --git a/src/main/java/com/fr/plugin/fg/auth/filter/LoginFilter.java b/src/main/java/com/fr/plugin/fg/auth/filter/LoginFilter.java new file mode 100644 index 0000000..790da0e --- /dev/null +++ b/src/main/java/com/fr/plugin/fg/auth/filter/LoginFilter.java @@ -0,0 +1,106 @@ +package com.fr.plugin.fg.auth.filter; + +import com.fr.data.NetworkHelper; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.utils.DecisionServiceConstants; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.security.JwtUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.web.Device; +import org.jasig.cas.client.validation.Assertion; + +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +public class LoginFilter extends AbstractGlobalRequestFilterProvider { + @Override + public String filterName() { + return "fineCasLogin"; + } + + @Override + public String[] urlPatterns() { + return new String[]{ "/*"}; + } + + @Override + public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { + try { + if (CasYaleFilter.isIgnoreRequest(request)) { + filterChain.doFilter(request, response); + return; + } + + HttpSession session = request.getSession(true); + FineLoggerFactory.getLogger().info("URL:" + request.getRequestURI()); + String username; + //获取cas传递过来的username + Object object = request.getSession().getAttribute("_const_cas_assertion_"); + if (object != null) { + Assertion assertion = (Assertion) object; + username = assertion.getPrincipal().getName(); + } else { + username = (String) session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); + } + + try { + //用户名为空,登录请求有问题,直接报错 + if (StringUtils.isNotEmpty(username)) { + FineLoggerFactory.getLogger().info("username:" + username); + //获取请求携带的token + Object oldToken = session.getAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME); + + //token不存在,或者token过期了,走后台登录方法 + if (oldToken == null || !checkTokenValid(request, (String) oldToken, username)) { + login(request, response, session, username); + filterChain.doFilter(request, response); + } else { + //放行 + filterChain.doFilter(request, response); + FineLoggerFactory.getLogger().info("no need"); + } + } else { + throw new Exception("username is empty"); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + /** + * 后台登录方法 + */ + private void login(HttpServletRequest req, HttpServletResponse res, HttpSession session, String username) throws Exception { + String token = LoginService.getInstance().login(req, res, username); + session.setAttribute("fine_auth_token", token); + req.setAttribute("fine_auth_token", token); + FineLoggerFactory.getLogger().info("fr FrFilter is over with username is ###" + username); + } + + /** + * 校验token是否有效 + */ + private boolean checkTokenValid(HttpServletRequest req, String token, String currentUserName) { + try { + //当前登录用户和token对应的用户名不同,需要重新生成token + if (!ComparatorUtils.equals(currentUserName, JwtUtils.parseJWT(token).getSubject())) { + FineLoggerFactory.getLogger().info("username changed:" + currentUserName); + return false; + } + Device device = NetworkHelper.getDevice(req); + LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); + return true; + } catch (Exception ignore) { + } + + return false; + } +}