private Middleware next;
public Middleware linkWith(Middleware next) {
this.next = next;
return next;
}
public abstract boolean check(String email, String password);
protected boolean checkNext(String email, String password) {
if (next == null) {
return true;
}
return next.check(email, password);
}
The **linkwith** method takes the parameter **checkNext** and the parameter value gets returned as **next**.
In the **checkNext** method I check to see if the parameters are of a certian type. There are only 2 users, **admin** and **user**.
So for those at home, don't expect to put this demo into production.
Now let's create a class named **ThrottlingMiddleware** and have it **extend**s **Middleware**.
Override **check (String email, String password)** replace return false with.
First we need some local varables:
private int requestPerMinute; private int request; private long currentTime;and now we code our method:
public ThrottlingMiddleware(int requestPerMinute) {
this.requestPerMinute = requestPerMinute;
this.currentTime = System.currentTimeMillis();
}
The next thing to add is to the override method **check** we repace the **return false** with:
if (System.currentTimeMillis() > currentTime + 60_000) {
request = 0;
currentTime = System.currentTimeMillis();
}
request++;
if (request > requestPerMinute) {
System.out.println("Request limit exceeded!");
Thread.currentThread().stop();
}
return checkNext(email, password);
create paclkage called server and add class **Server** to it do the following imports:
import java.util.HashMap; import java.util.Map; import TheRayCode.ChainOfResponsibility.middleware.Middleware;add code:
private Map<String, String> users = new HashMap<>();
private Middleware middleware;
private Middleware next;
public Middleware linkWith(Middleware next) {
this.next = next;
return next;
}
public void setMiddleware(Middleware middleware) {
this.middleware = middleware;
}
public boolean logIn(String email, String password) {
if (middleware.check(email, password)) {
System.out.println("Authorization have been successful!");
return true;
}
return false;
}
public void register(String email, String password) {
users.put(email, password);
}
public boolean hasEmail(String email) {
return users.containsKey(email);
}
public boolean isValidPassword(String email, String password) {
return users.get(email).equals(password);
}
create class **UserExistsMiddleware** have it **extends Middleware**
override **check** (String email, String password) with:
if (!server.hasEmail(email)) {
System.out.println("This email is not registered!");
return false;
}
if (!server.isValidPassword(email, password)) {
System.out.println("Wrong password!");
return false;
}
return checkNext(email, password);
add:
private Server server;and
public UserExistsMiddleware(Server server) {
this.server = server;
}
create class **RoleCheckMiddleware** have it **extends Middleware**
override **check** (String email, String password) with:
if (email.equals("admin@example.com")) {
System.out.println("Hello, admin!");
return true;
}
System.out.println("Hello, user!");
return checkNext(email, password);
create paclage **server** add class **Server**
go to **Demo** add imports:
import TheRayCode.ChainOfResponsibility.middleware.Middleware; import TheRayCode.ChainOfResponsibility.middleware.RoleCheckMiddleware; import TheRayCode.ChainOfResponsibility.middleware.ThrottlingMiddleware; import TheRayCode.ChainOfResponsibility.middleware.UserExistsMiddleware; import TheRayCode.ChainOfResponsibility.server.Server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;to the class **Demo**
public static void main(String[] args) { }
add:
throws IOExceptionadd local method:
private static void init() { }
let now add some code to this method
server = new Server();
server.register("admin@example.com", "admin_pass");
server.register("user@example.com", "user_pass");
and..
Middleware middleware = new ThrottlingMiddleware(2); middleware.linkWith(new UserExistsMiddleware(server)).linkWith(new RoleCheckMiddleware()); server.setMiddleware(middleware);Let's close out this totrial by adding some code using to the **init** we just created, in the **main** method we add.
init();
boolean success;
do {
System.out.print("Enter email: ");
String email = reader.readLine();
System.out.print("Input password: ");
String password = reader.readLine();
success = server.logIn(email, password);
} while (!success);
Let's run this an see what happens:
Enter email: admin@example.com Input password: admin_pass Hello, admin! Authorization have been successful!and let's run again:
Enter email: user@example.com Input password: user_pass Hello, user! Authorization have been successful!
Find Ray on:
wikipedia
youtube
The Ray Code
Ray Andrade

No comments:
Post a Comment