A little over a year ago with help from @stukalov (and others) I developed a constraint scheme that used .withInMemory
to build what I needed using Predicate
s. That thread was Access Groups: Why only one per user? - #29 от пользователя peterson.br . (It builds in-memory constraints within a AuthenticationEventListener
in the userLoggedIn
event for the logged-in user.)
I’ve now come back and updated to .15 and there were issues.
Before, I had:
ConstraintsContainer newConstraints = AccessConstraintsBuilder.create()
.join(session.getConstraints())
.withInMemory(NoteType.class, operationsRUD, isUserAllowedNoteType)
.withInMemory(PatientNotes.class, operationsRUD, isUserAllowedPatientNote)
.build();
Where isUserAllowedNoteType
and isUserAllowedPatientNote
were defined simply as Predicate
s. This previously compiled and it all worked perfectly.
Now on updating to .15 the withInMemory
calls were highlighted in red complaining that the third argument couldn’t be cast to ConstraintPredicate
. So apparently that method was changed and now needs a ConstraintPredicate
and not simply a Predicate
. Ok, so I redefined both of those to be ConstraintPredicate
s. Red highlighting gone, and it all compiles.
HOWEVER…
The server does start, but when I go to login to the application, it crashes, with a very long cascade of exceptions…
INFO: Server startup in [11,588] milliseconds
08:14:39.666 ERROR com.haulmont.cuba.web.AppUI - Unable to init ui
java.lang.RuntimeException: Unable to login as anonymous!
at com.haulmont.cuba.web.DefaultApp.loginOnStart(DefaultApp.java:314) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.AppUI.setupUI(AppUI.java:534) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.AppUI.init(AppUI.java:358) ~[cuba-web-7.2.15.jar:7.2.15]
at com.vaadin.ui.UI.doInit(UI.java:738) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:209) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:67) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1580) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.9.2-27-cuba.jar:8.9.2-27-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.2.15.jar:7.2.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.27]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.27]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.27]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-5.2.16.RELEASE.jar:5.2.16.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-5.2.16.RELEASE.jar:5.2.16.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) ~[cuba-web-7.2.15.jar:7.2.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[catalina.jar:9.0.27]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[catalina.jar:9.0.27]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.27]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) ~[catalina.jar:9.0.27]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.27]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.27]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-coyote.jar:9.0.27]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-coyote.jar:9.0.27]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) ~[tomcat-coyote.jar:9.0.27]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) ~[tomcat-coyote.jar:9.0.27]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.27]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.27]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: com.haulmont.cuba.security.global.InternalAuthenticationException: Exception is thrown by login provider
at com.haulmont.cuba.web.security.ConnectionImpl.loginInternal(ConnectionImpl.java:208) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.ConnectionImpl.login(ConnectionImpl.java:91) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.DefaultApp.loginOnStart(DefaultApp.java:312) ~[cuba-web-7.2.15.jar:7.2.15]
... 38 common frames omitted
Caused by: com.haulmont.cuba.core.sys.serialization.SerializationException: Failed to deserialize object type
at com.haulmont.cuba.core.sys.serialization.StandardSerialization.deserialize(StandardSerialization.java:73) ~[cuba-global-7.2.15.jar:7.2.15]
at com.haulmont.cuba.core.sys.serialization.StandardSerialization.deserialize(StandardSerialization.java:90) ~[cuba-global-7.2.15.jar:7.2.15]
at com.haulmont.cuba.core.sys.serialization.SerializationSupport.deserialize(SerializationSupport.java:71) ~[cuba-global-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:174) ~[cuba-web-7.2.15.jar:7.2.15]
at com.sun.proxy.$Proxy30.getAnonymousSession(Unknown Source) ~[na:na]
at com.haulmont.cuba.web.security.WebAnonymousSessionHolder.getAnonymousSessionFromService(WebAnonymousSessionHolder.java:74) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.WebAnonymousSessionHolder.initializeAnonymousSession(WebAnonymousSessionHolder.java:65) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.WebAnonymousSessionHolder.checkInitialized(WebAnonymousSessionHolder.java:54) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.WebAnonymousSessionHolder.getAnonymousSession(WebAnonymousSessionHolder.java:43) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.providers.AnonymousLoginProvider.login(AnonymousLoginProvider.java:51) ~[cuba-web-7.2.15.jar:7.2.15]
at com.haulmont.cuba.web.security.ConnectionImpl.loginInternal(ConnectionImpl.java:192) ~[cuba-web-7.2.15.jar:7.2.15]
... 40 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.medflex.medflexj.constraintpredicates.IsUserAllowedPatientNote
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) ~[catalina.jar:9.0.27]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) ~[catalina.jar:9.0.27]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:398) ~[na:na]
at org.apache.commons.lang3.ClassUtils.getClass(ClassUtils.java:993) ~[commons-lang3-3.9.jar:3.9]
at org.apache.commons.lang3.ClassUtils.getClass(ClassUtils.java:1027) ~[commons-lang3-3.9.jar:3.9]
at com.haulmont.cuba.core.sys.serialization.StandardSerialization$1.resolveClass(StandardSerialization.java:65) ~[cuba-global-7.2.15.jar:7.2.15]
at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1995) ~[na:na]
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464) ~[na:na]
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2358) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451) ~[na:na]
at java.base/java.util.ArrayList.readObject(ArrayList.java:929) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175) ~[na:na]
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451) ~[na:na]
at java.base/java.util.HashMap.readObject(HashMap.java:1460) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175) ~[na:na]
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464) ~[na:na]
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2358) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464) ~[na:na]
at java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629) ~[na:na]
at com.haulmont.cuba.security.global.UserSession.readObject(UserSession.java:125) ~[cuba-global-7.2.15.jar:7.2.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175) ~[na:na]
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325) ~[na:na]
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493) ~[na:na]
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451) ~[na:na]
at com.haulmont.cuba.core.sys.serialization.StandardSerialization.deserialize(StandardSerialization.java:69) ~[cuba-global-7.2.15.jar:7.2.15]
... 50 common frames omitted
The main issue seems to be the ClassNotFoundException
for the predicates, but I have no idea why the classes wouldn’t be found…when they definitely were before…
IsUserAllowedPatientNote
is:
package com.medflex.medflexj.constraintpredicates;
import com.haulmont.cuba.security.group.ConstraintPredicate;
import com.medflex.medflexj.entity.PatientNotes;
import com.medflex.medflexj.helper.DebugLog;
public class IsUserAllowedPatientNote implements ConstraintPredicate<PatientNotes> {
public boolean test(PatientNotes note) {
IsUserAllowedNoteType isUserAllowedNoteType = new IsUserAllowedNoteType();
DebugLog.info(this.getClass(), "Testing patient note {} (delegates to if note type is allowed)", note);
boolean result = isUserAllowedNoteType.test(note.getNoteType());
if (result) {
DebugLog.info(this.getClass(),"Note type allowed, so allowed");
return true;
} else {
DebugLog.info(this.getClass(),"Note type NOT allowed, so NOT allowed");
return false;
}
}
}
The other is a lot more complex, but the base issue here seems to be the classes not being found which is…odd.
Any help?