Java Decorate Functions

Spydernaz :

I am new to Java so apologies if this is a simple thing. I have built decorators in Python for authorizing RESTFul endpoints in Flask and have just built my first Java Webserver but am unable to figure out how to create a similar decorator in Java.

I want to do some pre-checks before running the method (i.e. is the user allowed to access this route). Ideally this would be a decorator like @authorize that, if authorized, will execute the method, but if unauthorized then it would through a 403 error instead.

@Path("/")
public final class HelloWorld {
    @GET
    @Path("/hello")
    @authorize                           // How would I implement this?
    public String sayHelloWorld() {
        return "Hello World!";
    }
}

EDIT: I am using Grizzly as the web Framework and I will be using an external Policy Management System (Apache Ranger) for managing authorization.

GhostCat salutes Monica C. :

First of all: defining such custom annotations is exactly how you can approach such things in Java. The JAX-RS specification provides all the things you need for such kind of method binding.

The thing that is slightly more complicated: how to nicely do that for the framework that you are using.

With JAX-RS and Jersey for example, creating your own annotations is well documented. And Jersey might be a good starting point, as that is simply a straight forward way to get JAX-RS working.

So, first you start by learning how to use Jersey in general, for example from vogella. Next: you can start to add your custom annotations, see here for an example.

There is even an existing question about using custom annotations for access validation.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326852&siteId=1