enhancing security service to be fully contextual
diff --git a/src/test/java/org/apache/geronimo/microprofile/impl/jwtauth/tck/TckSecurityService.java b/src/test/java/org/apache/geronimo/microprofile/impl/jwtauth/tck/TckSecurityService.java
index 7c3d590..9882e6f 100644
--- a/src/test/java/org/apache/geronimo/microprofile/impl/jwtauth/tck/TckSecurityService.java
+++ b/src/test/java/org/apache/geronimo/microprofile/impl/jwtauth/tck/TckSecurityService.java
@@ -16,6 +16,8 @@
*/
package org.apache.geronimo.microprofile.impl.jwtauth.tck;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Proxy;
import java.security.Principal;
import java.util.function.Supplier;
@@ -23,12 +25,21 @@
import javax.servlet.http.HttpServletRequest;
import org.apache.webbeans.corespi.security.SimpleSecurityService;
+import org.eclipse.microprofile.jwt.JsonWebToken;
// to drop upgrading MW
public class TckSecurityService extends SimpleSecurityService {
@Override
public Principal getCurrentPrincipal() {
- return ((Supplier<Principal>) CDI.current().select(HttpServletRequest.class).get()
- .getAttribute(Principal.class.getName() + ".supplier")).get();
+ return Principal.class.cast(Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+ new Class<?>[]{Principal.class, JsonWebToken.class},
+ (proxy, method, args) -> {
+ try {
+ return method.invoke(((Supplier<Principal>) CDI.current().select(HttpServletRequest.class).get()
+ .getAttribute(Principal.class.getName() + ".supplier")).get(), args);
+ } catch (final InvocationTargetException ite) {
+ throw ite.getTargetException();
+ }
+ }));
}
}