- Админ дает пользователю 1 права замещать пользователя 2.
- Пользователь 1 входит в систему.
- Админ запрещает пользователю 1 замещать пользователя 2.
- у Пользователя 1 все еще доступен пользователь 2 для замещения через выпадающий список в меню. При попытке замещения выходит ошибка
RuntimeException: Substitution error: javax.persistence.NoResultException: User not found
Но после этого сессия пользователя не возвращается к предыдущему состоянию. и появляется экран “Внутренняя ошибка сервера” с ошибкой
java.lang.IllegalStateException: There is no root screen opened
at com.haulmont.cuba.web.sys.WebScreens.getConfiguredWorkAreaOrNull(WebScreens.java:976) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.WebScreens.getCurrentBreadcrumbs(WebScreens.java:906) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.WebScreens$OpenedScreensImpl.getCurrentBreadcrumbs(WebScreens.java:2080) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.navigation.UrlChangeHandler.getActiveScreen(UrlChangeHandler.java:146) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.navigation.navigationhandler.ParamsNavigationHandler.doHandle(ParamsNavigationHandler.java:50) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.navigation.ScreenNavigator.handleScreenNavigation(ScreenNavigator.java:50) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.AppUI.processRequest(AppUI.java:707) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.AppUI.processExternalLink(AppUI.java:665) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.AppUI.handleRequest(AppUI.java:584) ~[cuba-web-7.2.14.jar:7.2.14]
at com.vaadin.server.communication.UIInitHandler.reinitUI(UIInitHandler.java:262) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:162) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:67) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1580) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.9.2-26-cuba.jar:8.9.2-26-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.2.14.jar:7.2.14]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.2.14.jar:7.2.14]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) ~[cuba-web-7.2.14.jar:7.2.14]
В ChangeSubstUserAction#actionPerform
происходит проверка на javax.persistence.NoResultException
но в AuthenticationServiceBean#substituteUser
при любой Throwable
выкидывает RuntimeException
. соответственно в ChangeSubstUserAction#actionPerform
мы не попадаем на doRevert()
. Возможно я где-то ошибся, но проблему я надеюсь вы поняли. Можно это как-то исправить?