- java.lang.Object
-
- aeonics.util.CheckCaller
-
public class CheckCaller extends java.lang.ObjectThis class offers simple methods to protect a method based on the calling method. You can either require or prevent another class to call a your function.Example to make sure the specified method is in the call stack:
public void foo() { CheckCaller.require(Example.class, "bar"); }While this is not a bulletproof security system, it is safe enough to be used as intended. However, in case unsafe reflection, bytecode manipulations, java agents, or debuggers are into play, the call stack trace can be manipulated or spoofed to mislead this implementation.
-
-
Constructor Summary
Constructors Constructor Description CheckCaller()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static voidprevent(java.lang.Class<?> clazz, java.lang.String method)Callsprevent(Class, String, int, boolean)with an unlimited depth and not strict check.static voidprevent(java.lang.Class<?> clazz, java.lang.String method, boolean strict)Callsprevent(Class, String, int, boolean)with an unlimited depth.static voidprevent(java.lang.Class<?> clazz, java.lang.String method, int maxDepth)Callsprevent(Class, String, int, boolean)in non strict mode.static voidprevent(java.lang.Class<?> clazz, java.lang.String method, int maxDepth, boolean strict)Checks that the current method has NOT been called as a result of the specified class and method.static voidrequire(java.lang.Class<?> clazz, java.lang.String method)Callsrequire(Class, String, int, boolean)with an unlimited depth and not strict check.static voidrequire(java.lang.Class<?> clazz, java.lang.String method, boolean strict)Callsrequire(Class, String, int, boolean)with an unlimited depth.static voidrequire(java.lang.Class<?> clazz, java.lang.String method, int maxDepth)Callsrequire(Class, String, int, boolean)in non strict mode.static voidrequire(java.lang.Class<?> clazz, java.lang.String method, int maxDepth, boolean strict)Checks that the current method has been called as a result of the specified class and method.
-
-
-
Method Detail
-
require
public static void require(java.lang.Class<?> clazz, java.lang.String method)Callsrequire(Class, String, int, boolean)with an unlimited depth and not strict check.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)- See Also:
require(Class, String, int, boolean)
-
require
public static void require(java.lang.Class<?> clazz, java.lang.String method, boolean strict)Callsrequire(Class, String, int, boolean)with an unlimited depth.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)strict- whether or not to check in strict mode- See Also:
require(Class, String, int, boolean)
-
require
public static void require(java.lang.Class<?> clazz, java.lang.String method, int maxDepth)Callsrequire(Class, String, int, boolean)in non strict mode.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)maxDepth- the maximum intermediate method calls- See Also:
require(Class, String, int, boolean)
-
require
public static void require(java.lang.Class<?> clazz, java.lang.String method, int maxDepth, boolean strict)Checks that the current method has been called as a result of the specified class and method.In other words:
class Test { public void foo() { CheckCaller.require(Example.class, "bar"); } }This code sample will check that the
foo()method has been called fromExample.bar()somewhere in the hyerarchy, it may be a direct call or an indirect call.If the method is null, then it is not checked and any method of the specified class is considered.
If the strict mode is enabled, then only the specified class is valid. Otherwise any other subclass (as defined by
Class.isAssignableFrom(Class)) is also valid.The maxDepth parameted defines the number of intermediate method calls allowed. In other words, the depth of the stack trace. The depth count starts as
0for the direct caller:public void foo() { // this will check that the direct caller (depth 0) // is exactly the Example class and no other subclass. CheckCaller.require(Example.class, "bar", 0, true); }- Parameters:
clazz- the class to checkmethod- the method to check (may be null)maxDepth- the maximum intermediate method callsstrict- whether or not to check in strict mode
-
prevent
public static void prevent(java.lang.Class<?> clazz, java.lang.String method)Callsprevent(Class, String, int, boolean)with an unlimited depth and not strict check.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)- See Also:
prevent(Class, String, int, boolean)
-
prevent
public static void prevent(java.lang.Class<?> clazz, java.lang.String method, boolean strict)Callsprevent(Class, String, int, boolean)with an unlimited depth.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)strict- whether or not to check in strict mode- See Also:
prevent(Class, String, int, boolean)
-
prevent
public static void prevent(java.lang.Class<?> clazz, java.lang.String method, int maxDepth)Callsprevent(Class, String, int, boolean)in non strict mode.- Parameters:
clazz- the class to checkmethod- the method to check (may be null)maxDepth- the maximum intermediate method calls- See Also:
prevent(Class, String, int, boolean)
-
prevent
public static void prevent(java.lang.Class<?> clazz, java.lang.String method, int maxDepth, boolean strict)Checks that the current method has NOT been called as a result of the specified class and method.In other words:
class Test { public void foo() { CheckCaller.prevent(Example.class, "bar"); } }This code sample will check that the
foo()method has not been called fromExample.bar()somewhere in the hyerarchy, either by a direct call or an indirect call.If the method is null, then it is not checked and any method of the specified class is considered.
If the strict mode is enabled, then only the specified class is valid. Otherwise any other subclass (as defined by
Class.isAssignableFrom(Class)) is also valid.The maxDepth parameted defines the number of intermediate method calls allowed. In other words, the depth of the stack trace. The depth count starts as
0for the direct caller:public void foo() { // this will check that the direct caller (depth 0) // is not the Example class nor any of its subclasses. // Although it would allow Example to be further in the hyerarchy. CheckCaller.prevent(Example.class, "bar", 0, false); }- Parameters:
clazz- the class to checkmethod- the method to check (may be null)maxDepth- the maximum intermediate method callsstrict- whether or not to check in strict mode
-
-