社区
Java SE
帖子详情
求教:类方法访问限制,“朋友”才可访问
jt6
2009-11-19 03:56:12
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得!
顺便问下类对象能不能了解此时访问自己的是什么对象?
...全文
271
40
打赏
收藏
求教:类方法访问限制,“朋友”才可访问
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得! 顺便问下类对象能不能了解此时访问自己的是什么对象?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
40 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jt6
2009-11-29
打赏
举报
回复
谢谢,谢4楼、5楼二位帮顶,10楼给出做法,19楼便是其代码。
。
StackTraceElement stack[]= (new Throwable()).getStackTrace();
15楼这位虽不能解决但PropertyDescriptor类值得研究。
.\pack2\pack2_1\B.java:11: 无法从静态上下文中引用非静态 方法 getPropertyType().
getPropertyType()
;
jt6
2009-11-29
打赏
举报
回复
前几天做了个系统还原,密码记不住了,一直没上来,嘿嘿。偶然找回来了,马上就结。对不住。
谢谢楼上各位指点。
Dan1980
2009-11-20
打赏
举报
回复
纯Java解决方法:给个标记接口即可。
bunrise
2009-11-20
打赏
举报
回复
写一个枚举,枚举出对应的访问限制或者权限
在写一个类,拥有线程安全的返回MAP的静态方法,MAP里KEY为枚举的东西,
VALUE为需要访问方法或者类的信息
以后要调用该方法,就通过枚举的东西在MAP里找
找到了,反射该方法
yilagong
2009-11-20
打赏
举报
回复
这样,你可以做个角色判段,把你的朋友赋给这种角色,有这个角色就可以访问你所要的东西了。
云上飞翔
2009-11-20
打赏
举报
回复
//提供一个外部能访问的方法
public void isUseFun1(Object obj)
==----------==
这样不行啊,别人不会老老实实传入this的,别人只要这样一传就
绕过去了
:
isUseFun1(new com.abc.b.c.Biz())//随便传入一个能使你正确判别的对象就行了。
lgm277531070
2009-11-20
打赏
举报
回复
让那些要访问方法的类都设置一个独特的属性,在访问方法的时候判断类是否具有那个属性,有则正常访问没有就抛出个异常来
handsomezhj
2009-11-20
打赏
举报
回复
不会。。。。。。。。。
云上飞翔
2009-11-20
打赏
举报
回复
[Quote=引用 35 楼 dan1980 的回复:]
纯Java解决方法:给个标记接口即可。
[/Quote]
那
如何控制
:哪些人
允许实现
该接口(如:com.abc包),哪些人
不允许实现
该接口(如:com.xyz包)呢?
zhouyongyang
2009-11-19
打赏
举报
回复
public class BIz
{
//提供一个外部能访问的方法
public void isUseFun1(Object obj)
{
Class class = obj.getClass();
if(class.getClassName().startsWith("com.abc")||class.getClassName().startsWith("cn.abc"))
{
fun1(Object[] params);
}
else
{
return;
}
}
//设为私有的
private void fun1(Object[] params)
{
}
}
zhouyongyang
2009-11-19
打赏
举报
回复
[Quote=引用 19 楼 jiangnaisong 的回复:]
引用楼主 jt6 的回复:
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得!
顺便问下类对象能不能了解此时访问自己的是什么对象?
可以啊。
我提供一个纯java做法:
代码如下(已测试成功)
Java codepackage com.abc.b.c;publicclass Biz {//该方法只能让com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法publicvoid fun1(Object[] params)
{//首先获取该方法的调用者的类的完整名称 StackTraceElement stack[]= (new Throwable()).getStackTrace();
String callerPathName=stack[1].getClassName();//这是调用者的类名//判是否是允许的指定包:com.abc包及其下级包、cn.abc包及其下级包if(callerPathName.startsWith("com.abc")||callerPathName.startsWith("cn.abc"))
{
System.out.println("允许使用");
}else
{
System.out.println("不允许使用");
}
}
}
以上仅供楼主参考
[/Quote]
真是个好办法啊
zhouyongyang
2009-11-19
打赏
举报
回复
[Quote=引用 1 楼 xiesisi3 的回复:]
public 所有包和子包都能访问
protected 只允许同一个包中的和不同包中的子类访问
default 只允许同一个包中的类访问
private 只允许自己访问
[/Quote]
UP
sangshusen_1988
2009-11-19
打赏
举报
回复
太有难度了
laker_914
2009-11-19
打赏
举报
回复
支持一下
huangqibing0626
2009-11-19
打赏
举报
回复
[Quote=引用 19 楼 jiangnaisong 的回复:]
引用楼主 jt6 的回复:
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得!
顺便问下类对象能不能了解此时访问自己的是什么对象?
可以啊。
我提供一个纯java做法:
代码如下(已测试成功)
Java codepackage com.abc.b.c;publicclass Biz {//该方法只能让com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法publicvoid fun1(Object[] params)
{//首先获取该方法的调用者的类的完整名称 StackTraceElement stack[]= (new Throwable()).getStackTrace();
String callerPathName=stack[1].getClassName();//这是调用者的类名//判是否是允许的指定包:com.abc包及其下级包、cn.abc包及其下级包if(callerPathName.startsWith("com.abc")||callerPathName.startsWith("cn.abc"))
{
System.out.println("允许使用");
}else
{
System.out.println("不允许使用");
}
}
}
以上仅供楼主参考
[/Quote]
值得借鉴
云上飞翔
2009-11-19
打赏
举报
回复
[Quote=引用 23 楼 closewbq 的回复:]
所谓不能用,就不能调用。我汗。。。
[/Quote]
楼主的目的其实并不是能不能调用(这是编译期的检查),而是非允许调用者,不给它执行相应的功能(运行期检查)。
修电视的攻城狮
2009-11-19
打赏
举报
回复
关注中
closewbq
2009-11-19
打赏
举报
回复
[Quote=引用 19 楼 jiangnaisong 的回复:]
引用楼主 jt6 的回复:
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得!
顺便问下类对象能不能了解此时访问自己的是什么对象?
可以啊。
我提供一个纯java做法:
代码如下(已测试成功)
Java codepackage com.abc.b.c;publicclass Biz {//该方法只能让com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法publicvoid fun1(Object[] params)
{//首先获取该方法的调用者的类的完整名称 StackTraceElement stack[]= (new Throwable()).getStackTrace();
String callerPathName=stack[1].getClassName();//这是调用者的类名//判是否是允许的指定包:com.abc包及其下级包、cn.abc包及其下级包if(callerPathName.startsWith("com.abc")||callerPathName.startsWith("cn.abc"))
{
System.out.println("允许使用");
}else
{
System.out.println("不允许使用");
}
}
}
以上仅供楼主参考
[/Quote]
所谓不能用,就不能调用。我汗。。。
bolink5
2009-11-19
打赏
举报
回复
顺便问下类对象能不能了解此时访问自己的是什么对象
使用Spring 是可以控制的
使用代理就可以获得访问的方法签名
jt6
2009-11-19
打赏
举报
回复
看起来crazylaa 提出的办法可行,可以!虽然说任何人都可以写个cn.abc.Test来调用Biz.fun1()其实也不是很安全。
[Quote=引用 10 楼 crazylaa 的回复:]
http://topic.csdn.net/t/20060812/15/4945099.html
参考下,顺便做标记,楼主要是解决了共享下啊
[/Quote]
输出
0:java.lang.Thread.getStackTrace(Thread.java:1426)
1:com.abc.b.c.B.whocall(B.java:7)
2:cn.abc.test.pack1.A.<init>(A.java:8)
3:cn.abc.test.Test.main(Test.java:7)
加载更多回复(20)
前端框架中的可
访问
性(Accessibility)设计
探讨前端开发中可
访问
性设计的重要性与实践
方法
,包括感知性、操作性、理解性和可靠性原则,以及语义化HTML、替代文本、颜色对比等实现技巧。
关于 Web 可
访问
性的神话
网络可
访问
性经常被误解为困难、昂贵或只针对残疾人。然而,事实远非如此。无障碍设计并不复杂,只需投入时间和努力就能实现。同时,它并不增加额外成本,反而能带来商业利益。美观与可
访问
性并不矛盾,可
访问
的网站可以同样吸引人。此外,无障碍设计服务于各种用户,包括但不限于视觉障碍者。自动测试虽有帮助,但不能完全替代手动测试。HTML默认并非完全可
访问
,ARIA的使用需谨慎。最后,减少运动的选项并不意味着完全消除所有动画,而是要确保对所有用户友好。
传图识字有次数
限制
吗_企业微信发
朋友
圈有
限制
吗?企业微信
朋友
圈文章会被屏蔽吗?...
企业微信在办公中广泛使用,但其
朋友
圈功能有
限制
,每个客户每天只能接收一条
朋友
圈,每月四条。微伴助手能帮助企业突破发送
限制
,并提醒员工同步。若客户不希望接收,可在微信中屏蔽。利用微伴助手的客户画像功能,可以更精准地推送
朋友
圈,降低被屏蔽概率。想要体验更多高级功能,可
访问
微伴助手官网。
图解李白的“
朋友
圈”
本文以《长安三万里》引出李白“
朋友
圈”,介绍用知识图谱直观呈现其关系。阐述知识图谱概念、生命周期,说明用gBuilder构建李白“
朋友
圈”知识图谱的
方法
,提及用gStore存储管理,还展示了知识图谱在查询人物关系、分析重要诗人等方面的应用,其在多领域有广泛用途。
如何破解“仅三天可见”的
朋友
圈?
本文介绍了一种破解微信
朋友
圈仅三天可见
限制
的
方法
,适用于特定需求的用户。通过将其他好友的
朋友
圈设置为不可见,使目标好友的
朋友
圈内容得以全部展现。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章