按通常思维,我们对于读权限,我们设计一个具备读的角色类: 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 |& S; m$ n& i# q
www.520diannao.com4 i& j1 E% H# p. E5 Q. \
public interface IpersonRO {
* P/ c& K: `0 f电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
6 T! @9 m( i5 X5 l! o) l我爱电脑技术社区--打造最好的电脑技术自学交流平台public String getName(); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站. f# a8 c; K' y" r' ^& `1 t
* l+ H% O7 K5 i& a打造最好的电脑自学交流论坛public String getAddress();
0 T' C$ ~, c, i. K
' ^, A% ]: F/ X, N( H电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站public String getPhoneNumber(); 我爱电脑技术社区--打造最好的电脑技术自学交流平台# g/ b8 C$ Y2 n6 Z1 L' y R8 d( D+ E
! v- Q0 y, D7 H7 S5 U A$ M}
4 L9 o }, w# B5 ~2 T打造最好的电脑自学交流论坛
4 [ }7 b" e$ B4 |5 ~- k( n& K3 D) U我爱电脑技术社区--打造最好的电脑技术自学交流平台
: f5 ^6 ]/ @+ a. u/ P我爱电脑技术论坛类里面都是读的方法,这是一种粗粒度访问控制,也就是说把读写权限只落实到类(对象)上,这样的话,我们还要为写的角色再建一个类,很显然这不是一个很好的方法,使用动态proxy+acl就可以实现很好的细粒度控制。 www.520diannao.com$ V; V% q0 E1 d3 }
打造最好的电脑自学交流论坛, D: G$ H! E- |6 }& f4 U# G
public class ReportProxy implements InvocationHandler
5 O2 B# B3 k- d: K; }$ p5 e& u! _我爱电脑技术社区--打造最好的电脑技术自学交流平台6 k- }4 P9 V% U4 v+ o* J( _0 h/ S: ^
{
, y3 K) v, ]/ }* t; Zwww.520diannao.comwww.520diannao.com p" N( I, D! S7 U0 d
private Map map;
3 I) E6 b" K" j |" W+ t8 y2 \- K打造最好的电脑自学交流论坛
) |& s+ N/ w5 nwww.520diannao.compublic static Object newInstance(Map map,Class[] interfaces) 我爱电脑技术社区--打造最好的电脑技术自学交流平台2 S/ C( I+ c. Z
* y8 | F* R4 f: l1 c6 T& Q; Q# u7 ?0 L打造最好的电脑自学交流论坛{ 打造最好的电脑自学交流论坛0 O& h" c( f- @# d5 d% r( j4 i$ n B
* t# e5 Y5 R: m1 `8 Dwww.520diannao.comreturn Proxy.newProxyInstance(map.getClass().getClassLoader(), interfaces,new ReportProxy(map));
7 }; Z1 L$ Q: k& S0 u0 k3 O( F1 b我爱电脑技术论坛我爱电脑技术论坛# [" C* ^( C" `
} 打造最好的电脑自学交流论坛7 A" j/ v$ H3 V/ \) I& `
我爱电脑技术论坛4 a" k0 d* \9 s& l6 W9 X
public ReportProxy(Map map) 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站3 i8 @$ z* @( Q, r6 s7 T1 F+ h
0 Y1 C; J1 [, ?* p0 b, f( e, P" r打造最好的电脑自学交流论坛{ 我爱电脑技术论坛 U' Z. u5 q" H7 g" B \
# X: R3 s9 ]0 k# [8 R+ E打造最好的电脑自学交流论坛this.map = map; 打造最好的电脑自学交流论坛4 D9 D+ n" r$ o; a
7 O, J% M: g8 m) ]1 ~+ W( ?! M( s% B打造最好的电脑自学交流论坛}
* F. B ?( s, Z+ b5 Q# M L打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站3 W7 @3 Q, i; |% k; \0 D8 z4 j
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
1 M- c6 c3 o- T5 B# l8 d2 \, ^www.520diannao.com
9 O: P+ W! M! b; j2 C0 y$ `. Lwww.520diannao.com{ 我爱电脑技术论坛7 ]& `, e# h3 K- m; [: `, ]2 T
我爱电脑技术论坛2 k# F4 r: [9 x, B! m
Object result;
. l% q) W W7 X2 Q, q: ~; w* w) E$ Z
5 c7 F. B; L! U8 i. I( A我爱电脑技术社区--打造最好的电脑技术自学交流平台String methodName = m.getName(); 打造最好的电脑自学交流论坛: I2 g% ~' C- |2 W: \
我爱电脑技术社区--打造最好的电脑技术自学交流平台( u. ^1 k1 U* {2 Z# ^- Q6 X, L
if (methodName.startsWith("get"))
: F2 N" h! p3 I- A$ ^8 ~9 W电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
0 m' u# S0 k" rwww.520diannao.com{ $ O5 O( P9 F; V
打造最好的电脑自学交流论坛, U! b# Y$ m2 f9 I k- \! b
if (!acl.checkPermission(user, "read")) return null;
! b l2 \+ P# i: x% B打造最好的电脑自学交流论坛www.520diannao.com* ]) z# e" i! |: ~7 Z8 ~ u# T
String name = methodName.substring(
# {& S5 e8 V9 A& N: ^" i- B( h我爱电脑技术论坛
/ C/ W6 i# E; D% i5 [! Q7 }电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站methodName.indexOf("get")+3); 6 v! `# S) c* l8 U
3 F3 [# ]: p8 g8 N- v( ^www.520diannao.comreturn map.get(name); www.520diannao.com% ?' A& L. Z2 |- a! L: d: _
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) c: J- _7 p4 \* I& H
}
: Z) i1 K* F: m0 Y* o) l; x
: H! ^5 _/ q6 t0 ~& _1 g. @2 \else if (methodName.startsWith("set"))
0 G+ V' o' s% @# r0 F0 N o$ D* Lwww.520diannao.com
" h* s. S/ c5 _5 Y& D# W9 F; v打造最好的电脑自学交流论坛{ 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站8 _" f' p8 I. [: @. Q
% W* R6 s) Y3 } z* X5 q. e: jwww.520diannao.comif (!acl.checkPermission(user, "write")) return null; 打造最好的电脑自学交流论坛. f- \- e( `# W# r: V6 N) W
我爱电脑技术社区--打造最好的电脑技术自学交流平台0 a. p. t1 [" ^. Z- e# b
String name = methodName.substring( 1 ]/ t( K1 Z0 T/ S* s
" Q1 D; u8 r4 _www.520diannao.commethodName.indexOf("set")+3); 我爱电脑技术论坛 W& R4 H& w; H5 k7 u
- I$ M6 a5 ^" Ewww.520diannao.commap.put(name, args[0]); s( ^* O- l% v( Z
; `! k# x' j C% d6 ^1 a我爱电脑技术论坛return null; 我爱电脑技术论坛, S/ ]( D" d, s: F% \5 g) K% G2 d& @
1 e3 n8 z4 B7 X: A! L5 H# R1 ~打造最好的电脑自学交流论坛}
; ?5 ]- L4 R2 n, s* y打造最好的电脑自学交流论坛4 {0 a7 X4 H9 q' b: v
else if (methodName.startsWith("is"))
* Q: u9 J3 E% E& m; i$ d/ U2 J
- L2 t1 g0 _) Z9 }* p( B. u2 u; X( G{ $ x- D* { R3 n" S$ X2 G5 `/ o
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 u ~' s* y7 p' V* }# c
if (!acl.checkPermission(user, "read")) return null;
" t' C i$ {' ^6 r7 @9 {www.520diannao.com
! C/ m6 r# U* C6 _4 Twww.520diannao.comString name = methodName.substring(
$ A! ?- a5 o1 b [5 O. x3 F打造最好的电脑自学交流论坛
' n5 M, z: ]1 b: W5 S2 P打造最好的电脑自学交流论坛methodName.indexOf("is")+2);
2 A/ W x, s( {6 S: P6 B% Q* v
- |! m3 B# y1 M$ O电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站return(map.get(name));
- V, @% Y7 F `1 X h, y4 u ywww.520diannao.com电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站6 K: I% D! @# I5 M5 Y3 u; K% E+ k0 B" A
}
8 J {9 f- G. V/ s( jwww.520diannao.com
& D* T. {( |1 \" ~( pwww.520diannao.comreturn null; 我爱电脑技术社区--打造最好的电脑技术自学交流平台) j/ @$ [% R- l2 y
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 Z: I3 A5 J8 V( K
}
% Y& P, c B. V/ J$ ^. w8 h/ f; Cwww.520diannao.com打造最好的电脑自学交流论坛 I" A; _9 }. P: o# |3 c% w w
}