社区
Java SE
帖子详情
求教:类方法访问限制,“朋友”才可访问
jt6
2009-11-19 03:56:12
我有个类com.abc.b.c.Biz,其中有一个方法fun1(Object[] params),想限制只能是com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法,求教怎么做?纯java做法、框架做法都要得!
顺便问下类对象能不能了解此时访问自己的是什么对象?
...全文
274
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)设计
前端框架中的可
访问
性(Accessibility)设计
关于 Web 可
访问
性的神话
原文地址:Myths about Web Accessibility 原文作者:Alvaro Montoro 译文出自:掘金翻译计划 原文链接:https://alvaromontoro.com/blog/67989/myths-about-web-accessibility 网络可
访问
性是每个 Web 开发项目中的必去之处,但对于许多 Web 开发人员来说,它似乎...
传图识字有次数
限制
吗_企业微信发
朋友
圈有
限制
吗?企业微信
朋友
圈文章会被屏蔽吗?...
现在有很多企业都是用企业微信来办公,不仅是因为它功能强大,还有操作简单容易上手,因为有很多功能都是和微信相似的,就比如
朋友
圈功能,那么企业微信发
朋友
圈会有
限制
吗企业微信
朋友
圈文章会被屏蔽吗?今天就让我们一起来看看。1企业微信
朋友
圈
限制
是什么微信和企业微信很多功能是互通的,我们在使用微信发
朋友
圈时,是不
限制
发送次数的,那么企业微信也可以无
限制
发
朋友
圈吗?与微信
朋友
圈不同,企业微信是会
限制
朋...
图解李白的“
朋友
圈”
本次我们从互联网上搜集了有关《长安三万里》中的人物以及其他唐代著名诗人的基本信息,然后以诗人、诗歌为主要实体
类
型,梳理了诗人之间的关系,在gBuilder中用非结构化数据表单录入的方式,最终得到了唐朝诗人关系的RDF文件。节点可以表示实体和属性,边可以表示为实体-实体和实体-属性之间的关系,这种形式对处理复杂的关联关系有着天然的优势,也更接近人
类
认知世界的形式,为数据处理提供了一种更好的组织和管理能力。在实际项目中,也可以根据不同
类
型的数据选择不同的抽取方式,或多种方式结合的形式来构建知识图谱。
如何破解“仅三天可见”的
朋友
圈?
点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取来源:扩展迷EXTFANS之前微博上出现过一个热搜话题:超一亿人
朋友
圈仅三天可见。微信创始人张小龙在年度演讲...
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章