Java – 如何限制特定方法的方法调用
发布时间:2020-12-15 04:45:27 所属栏目:Java 来源:网络整理
导读:我有一个特殊的要求,我需要确保只允许一个类中的特定方法从第二个类调用公共(非静态)方法.不能使用继承. 一种选择是使用StackTrace,如下所示: ClassA.java package org.rnd.stack;public class ClassA { public void methodA() throws IllegalAccessExcepti
我有一个特殊的要求,我需要确保只允许一个类中的特定方法从第二个类调用公共(非静态)方法.不能使用继承.
一种选择是使用StackTrace,如下所示: ClassA.java package org.rnd.stack; public class ClassA { public void methodA() throws IllegalAccessException { Exception fake = new Exception("FAKE-IGNORE"); StackTraceElement[] stack = fake.getStackTrace(); StackTraceElement st = stack[1]; if ("org.rnd.stack.ClassB".equals(st.getClassName()) && "methodB".equals(st.getMethodName())) { System.out.println("You are allowed to call"); } else { throw new IllegalAccessException("You are not allowed to call"); } } } ClassB.java package org.rnd.stack; public class ClassB { public void methodB() throws IllegalAccessException { new ClassA().methodA(); } public void illegalMethod() throws IllegalAccessException { new ClassA().methodA(); } public static void main(String[] args) { try { new ClassB().methodB(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 现在上述解决方案工作正常,但由于代码审计中的质量控制,我需要提出另一个(或更确切地说)更好的解决方案.有没有更好的方法来实现这一目标? 解决方法
改进方法的一种方法是,您不需要创建异常来获取堆栈跟踪,您可以使用线程方法.
StackTraceElement[] stack = Thread.currentThread().getStackTrace(); 也许你想使用该类而不是手写包.例如: if (ClassB.class.getName().equals(st.getClassName()) && "methodB".equals(st.getMethodName())) { System.out.println("You are allowed to call"); } else { throw new IllegalAccessException("You are not allowed to call"); } 除此之外,我不知道如何在不改变逻辑或继承的情况下更好地做到这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |