DemoRestController.java
package sk.iway.demo8;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.system.spring.SpringSecurityConf;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.random.RandomGeneratorFactory;
import java.util.stream.IntStream;
import javax.servlet.http.HttpServletRequest;
@RestController
public class DemoRestController
{
@GetMapping(path={"/demo-test"})
public String test(HttpServletRequest request)
{
final StringBuilder result = new StringBuilder();
result.append("Demo OK ").append(Constants.getInstallName()).append("\n<br>").append("\n<br>");
result.append("docList.size="+DocDB.getInstance().getDocByGroup(4).size()).append("\n<br>").append("\n<br>");
result.append("Java 17 (<a href=\"https://www.baeldung.com/java-17-new-features\">https://www.baeldung.com/java-17-new-features</a>)").append("\n<br>");
IntStream random = RandomGeneratorFactory.of("Random")
.create()
.ints(10, 0, 100);
result.append("<b>2.2. Enhanced Pseudo-Random Number Generators</b>").append("\n<br>");
random.forEach(i -> result.append(i).append("\n<br>"));
result.append("\n<br>").append("\n<br>");
result.append("Java 16 (<a href=\"https://www.baeldung.com/java-16-new-features\">https://www.baeldung.com/java-16-new-features</a>)").append("\n<br>");
String r = "";
Object proxy = Proxy.newProxyInstance(getClass().getClassLoader(), new Class<?>[] { HelloWorld.class },
(prox, method, args) -> {
if (method.isDefault()) {
return InvocationHandler.invokeDefault(prox, method, args);
}
return "default not found";
}
);
try {
Method method = proxy.getClass().getMethod("hello");
r = (String) method.invoke(proxy);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
result.append("<b>2. Invoke Default Methods From Proxy Instances</b>").append("\n<br>");
result.append("Vysledok by mal byt world, je: ").append(r);
result.append("\n<br>").append("\n<br>");
String name = Tools.getParameter(request, "name");
result.append("\n<p class='name-request'>").append(name).append("</p>");
return result.toString();
}
/**
* Get current basic auth status. It's used in autotests api-auth.js
* @return
*/
@GetMapping(path={"/rest/basic-auth-enabled"})
public String isBasicAuthEnabled()
{
return "{ \"result\": " + SpringSecurityConf.isBasicAuthEnabled() + " }";
}
/**
* Test private URL with basic auth in api-auth.js
* @return
*/
@GetMapping(path={"/private/rest/demo-test"})
@PreAuthorize(value = "@WebjetSecurityService.isLogged()")
public String testPrivateUrl()
{
return "{ \"result\": \"Demo OK\" }";
}
/**
* Test POST url referrers in api-auth.js
* @param id
* @return
*/
@PostMapping(value="/private/rest/demo-post", consumes = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize(value = "@WebjetSecurityService.isLogged()")
public String testPrivatePostUrl(@RequestBody DocDetails doc)
{
return "{ \"result\": \"Demo OK\", \"id\": " + doc.getId() + " }";
}
}