UI Spring Context Holder bean registration (#1026)
* register the Spring Context Holder bean for UI instead of setting the context for each UI separately * reverted test scope for db driver Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>
This commit is contained in:
@@ -20,6 +20,7 @@ import org.eclipse.hawkbit.ui.push.HawkbitEventPermissionChecker;
|
|||||||
import org.eclipse.hawkbit.ui.push.HawkbitEventProvider;
|
import org.eclipse.hawkbit.ui.push.HawkbitEventProvider;
|
||||||
import org.eclipse.hawkbit.ui.push.UIEventPermissionChecker;
|
import org.eclipse.hawkbit.ui.push.UIEventPermissionChecker;
|
||||||
import org.eclipse.hawkbit.ui.push.UIEventProvider;
|
import org.eclipse.hawkbit.ui.push.UIEventProvider;
|
||||||
|
import org.eclipse.hawkbit.ui.utils.SpringContextHolder;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
@@ -81,6 +82,16 @@ public class MgmtUiAutoConfiguration {
|
|||||||
return new HawkbitEventPermissionChecker(permChecker);
|
return new HawkbitEventPermissionChecker(permChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bean for creating a singleton instance of the {@link SpringContextHolder}
|
||||||
|
*
|
||||||
|
* @return the singleton instance of the {@link SpringContextHolder}
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
SpringContextHolder springContextHolder() {
|
||||||
|
return SpringContextHolder.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The UI scoped event push strategy. Session scope is necessary, that every
|
* The UI scoped event push strategy. Session scope is necessary, that every
|
||||||
* UI has an own strategy.
|
* UI has an own strategy.
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public final class EventPublisherHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the cache manager holder singleton instance
|
* @return the event publisher holder singleton instance
|
||||||
*/
|
*/
|
||||||
public static EventPublisherHolder getInstance() {
|
public static EventPublisherHolder getInstance() {
|
||||||
return SINGLETON;
|
return SINGLETON;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import org.eclipse.hawkbit.ui.push.UIEventProvider;
|
|||||||
import org.eclipse.hawkbit.ui.themes.HawkbitTheme;
|
import org.eclipse.hawkbit.ui.themes.HawkbitTheme;
|
||||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||||
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
|
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
|
||||||
import org.eclipse.hawkbit.ui.utils.SpringContextHelper;
|
|
||||||
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -104,8 +103,6 @@ public abstract class AbstractHawkbitUI extends UI implements DetachListener {
|
|||||||
pushStrategy.clean();
|
pushStrategy.clean();
|
||||||
clearContextListener();
|
clearContextListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
SpringContextHelper.clearContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearContextListener() {
|
private void clearContextListener() {
|
||||||
@@ -127,7 +124,6 @@ public abstract class AbstractHawkbitUI extends UI implements DetachListener {
|
|||||||
pushStrategy.init(getUI());
|
pushStrategy.init(getUI());
|
||||||
}
|
}
|
||||||
addDetachListener(this);
|
addDetachListener(this);
|
||||||
SpringContextHelper.setContext(context);
|
|
||||||
|
|
||||||
Responsive.makeResponsive(this);
|
Responsive.makeResponsive(this);
|
||||||
addStyleName(ValoTheme.UI_WITH_MENU);
|
addStyleName(ValoTheme.UI_WITH_MENU);
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import org.eclipse.hawkbit.ui.common.data.proxies.ProxySoftwareModule;
|
|||||||
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
|
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
|
||||||
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
|
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
|
||||||
import org.eclipse.hawkbit.ui.common.event.EventTopics;
|
import org.eclipse.hawkbit.ui.common.event.EventTopics;
|
||||||
import org.eclipse.hawkbit.ui.utils.SpringContextHelper;
|
import org.eclipse.hawkbit.ui.utils.SpringContextHolder;
|
||||||
import org.eclipse.hawkbit.ui.utils.UINotification;
|
import org.eclipse.hawkbit.ui.utils.UINotification;
|
||||||
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -78,9 +78,9 @@ public abstract class AbstractFileTransferHandler implements Serializable {
|
|||||||
final Lock uploadLock) {
|
final Lock uploadLock) {
|
||||||
this.artifactManagement = artifactManagement;
|
this.artifactManagement = artifactManagement;
|
||||||
this.i18n = i18n;
|
this.i18n = i18n;
|
||||||
this.eventBus = SpringContextHelper.getBean(EventBus.UIEventBus.class);
|
this.eventBus = SpringContextHolder.getInstance().getBean(EventBus.UIEventBus.class);
|
||||||
this.artifactUploadState = SpringContextHelper.getBean(ArtifactUploadState.class);
|
this.artifactUploadState = SpringContextHolder.getInstance().getBean(ArtifactUploadState.class);
|
||||||
this.uiNotification = SpringContextHelper.getBean(UINotification.class);
|
this.uiNotification = SpringContextHolder.getInstance().getBean(UINotification.class);
|
||||||
this.uploadLock = uploadLock;
|
this.uploadLock = uploadLock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,8 +103,9 @@ public abstract class AbstractFileTransferHandler implements Serializable {
|
|||||||
|
|
||||||
protected void startTransferToRepositoryThread(final InputStream inputStream, final FileUploadId fileUploadId,
|
protected void startTransferToRepositoryThread(final InputStream inputStream, final FileUploadId fileUploadId,
|
||||||
final String mimeType) {
|
final String mimeType) {
|
||||||
SpringContextHelper.getBean("uiExecutor", Executor.class).execute(new TransferArtifactToRepositoryRunnable(
|
SpringContextHolder.getInstance().getBean("uiExecutor", Executor.class)
|
||||||
inputStream, fileUploadId, mimeType, UI.getCurrent(), uploadLock));
|
.execute(new TransferArtifactToRepositoryRunnable(inputStream, fileUploadId, mimeType, UI.getCurrent(),
|
||||||
|
uploadLock));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void interruptUploadAndSetReason(final String failureReason) {
|
private void interruptUploadAndSetReason(final String failureReason) {
|
||||||
@@ -241,15 +242,15 @@ public abstract class AbstractFileTransferHandler implements Serializable {
|
|||||||
* Constructor for TransferArtifactToRepositoryRunnable
|
* Constructor for TransferArtifactToRepositoryRunnable
|
||||||
*
|
*
|
||||||
* @param inputStream
|
* @param inputStream
|
||||||
* InputStream
|
* InputStream
|
||||||
* @param fileUploadId
|
* @param fileUploadId
|
||||||
* FileUploadId
|
* FileUploadId
|
||||||
* @param mimeType
|
* @param mimeType
|
||||||
* String
|
* String
|
||||||
* @param vaadinUi
|
* @param vaadinUi
|
||||||
* UI
|
* UI
|
||||||
* @param uploadLock
|
* @param uploadLock
|
||||||
* Lock
|
* Lock
|
||||||
*/
|
*/
|
||||||
public TransferArtifactToRepositoryRunnable(final InputStream inputStream, final FileUploadId fileUploadId,
|
public TransferArtifactToRepositoryRunnable(final InputStream inputStream, final FileUploadId fileUploadId,
|
||||||
final String mimeType, final UI vaadinUi, final Lock uploadLock) {
|
final String mimeType, final UI vaadinUi, final Lock uploadLock) {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails;
|
import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails;
|
||||||
import org.eclipse.hawkbit.im.authentication.UserPrincipal;
|
import org.eclipse.hawkbit.im.authentication.UserPrincipal;
|
||||||
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
||||||
import org.eclipse.hawkbit.ui.utils.SpringContextHelper;
|
import org.eclipse.hawkbit.ui.utils.SpringContextHolder;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.context.SecurityContext;
|
import org.springframework.security.core.context.SecurityContext;
|
||||||
import org.springframework.security.core.userdetails.User;
|
import org.springframework.security.core.userdetails.User;
|
||||||
@@ -179,10 +179,10 @@ public final class UserDetailsFormatter {
|
|||||||
public static UserDetails getCurrentUser() {
|
public static UserDetails getCurrentUser() {
|
||||||
final SecurityContext context = (SecurityContext) VaadinService.getCurrentRequest().getWrappedSession()
|
final SecurityContext context = (SecurityContext) VaadinService.getCurrentRequest().getWrappedSession()
|
||||||
.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
|
.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
|
||||||
Authentication authentication = context.getAuthentication();
|
final Authentication authentication = context.getAuthentication();
|
||||||
if (authentication instanceof OAuth2AuthenticationToken) {
|
if (authentication instanceof OAuth2AuthenticationToken) {
|
||||||
OidcUser oidcUser = (OidcUser) authentication.getPrincipal();
|
final OidcUser oidcUser = (OidcUser) authentication.getPrincipal();
|
||||||
Object details = authentication.getDetails();
|
final Object details = authentication.getDetails();
|
||||||
String tenant = "DEFAULT";
|
String tenant = "DEFAULT";
|
||||||
if (details instanceof TenantAwareAuthenticationDetails) {
|
if (details instanceof TenantAwareAuthenticationDetails) {
|
||||||
tenant = ((TenantAwareAuthenticationDetails) details).getTenant();
|
tenant = ((TenantAwareAuthenticationDetails) details).getTenant();
|
||||||
@@ -207,7 +207,8 @@ public final class UserDetailsFormatter {
|
|||||||
// Exception squid:S1166 - exception has to be hidden
|
// Exception squid:S1166 - exception has to be hidden
|
||||||
@SuppressWarnings({ "squid:S1166" })
|
@SuppressWarnings({ "squid:S1166" })
|
||||||
private static UserDetails loadUserByUsername(final String username) {
|
private static UserDetails loadUserByUsername(final String username) {
|
||||||
final UserDetailsService userDetailsService = SpringContextHelper.getBean(UserDetailsService.class);
|
final UserDetailsService userDetailsService = SpringContextHolder.getInstance()
|
||||||
|
.getBean(UserDetailsService.class);
|
||||||
try {
|
try {
|
||||||
return userDetailsService.loadUserByUsername(username);
|
return userDetailsService.loadUserByUsername(username);
|
||||||
} catch (final UsernameNotFoundException e) {
|
} catch (final UsernameNotFoundException e) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import javax.validation.ConstraintViolationException;
|
|||||||
|
|
||||||
import org.eclipse.hawkbit.ui.common.notification.ParallelNotification;
|
import org.eclipse.hawkbit.ui.common.notification.ParallelNotification;
|
||||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||||
import org.eclipse.hawkbit.ui.utils.SpringContextHelper;
|
import org.eclipse.hawkbit.ui.utils.SpringContextHolder;
|
||||||
import org.eclipse.hawkbit.ui.utils.UINotification;
|
import org.eclipse.hawkbit.ui.utils.UINotification;
|
||||||
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -106,7 +106,7 @@ public class HawkbitUIErrorHandler extends DefaultErrorHandler {
|
|||||||
LOG.error("Error in UI: ", ex);
|
LOG.error("Error in UI: ", ex);
|
||||||
|
|
||||||
final String errorMessage = extractMessageFrom(ex);
|
final String errorMessage = extractMessageFrom(ex);
|
||||||
final VaadinMessageSource i18n = SpringContextHelper.getBean(VaadinMessageSource.class);
|
final VaadinMessageSource i18n = SpringContextHolder.getInstance().getBean(VaadinMessageSource.class);
|
||||||
|
|
||||||
return buildErrorNotification(i18n.getMessage("caption.error"), errorMessage);
|
return buildErrorNotification(i18n.getMessage("caption.error"), errorMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
|||||||
import org.eclipse.hawkbit.ui.themes.HawkbitTheme;
|
import org.eclipse.hawkbit.ui.themes.HawkbitTheme;
|
||||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||||
import org.eclipse.hawkbit.ui.utils.SpringContextHelper;
|
|
||||||
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
|
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
|
||||||
import org.eclipse.hawkbit.ui.utils.UINotification;
|
import org.eclipse.hawkbit.ui.utils.UINotification;
|
||||||
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
|
||||||
@@ -117,7 +116,6 @@ public abstract class AbstractHawkbitLoginUI extends UI {
|
|||||||
@Override
|
@Override
|
||||||
protected void init(final VaadinRequest request) {
|
protected void init(final VaadinRequest request) {
|
||||||
HawkbitCommonUtil.initLocalization(this, uiProperties.getLocalization(), i18n);
|
HawkbitCommonUtil.initLocalization(this, uiProperties.getLocalization(), i18n);
|
||||||
SpringContextHelper.setContext(context);
|
|
||||||
|
|
||||||
params = UriComponentsBuilder.fromUri(Page.getCurrent().getLocation()).build().getQueryParams();
|
params = UriComponentsBuilder.fromUri(Page.getCurrent().getLocation()).build().getQueryParams();
|
||||||
|
|
||||||
|
|||||||
@@ -8,30 +8,31 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.ui.utils;
|
package org.eclipse.hawkbit.ui.utils;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Singleton for the spring application context.
|
* Singleton for the spring application context.
|
||||||
*/
|
*/
|
||||||
public final class SpringContextHelper {
|
public final class SpringContextHolder {
|
||||||
|
|
||||||
private static ApplicationContext context;
|
private static final SpringContextHolder SINGLETON = new SpringContextHolder();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private Constructor.
|
* Private Constructor.
|
||||||
*/
|
*/
|
||||||
private SpringContextHelper() {
|
private SpringContextHolder() {
|
||||||
// Utility class
|
// Utility class
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method to set application context.
|
* @return the spring context holder singleton instance
|
||||||
*
|
|
||||||
* @param context
|
|
||||||
* ApplicationContext
|
|
||||||
*/
|
*/
|
||||||
public static void setContext(final ApplicationContext context) {
|
public static SpringContextHolder getInstance() {
|
||||||
SpringContextHelper.context = context;
|
return SINGLETON;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,7 +43,7 @@ public final class SpringContextHelper {
|
|||||||
* application context
|
* application context
|
||||||
* @return the requested bean
|
* @return the requested bean
|
||||||
*/
|
*/
|
||||||
public static Object getBean(final String beanName) {
|
public Object getBean(final String beanName) {
|
||||||
return context.getBean(beanName);
|
return context.getBean(beanName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +55,7 @@ public final class SpringContextHelper {
|
|||||||
* application context
|
* application context
|
||||||
* @return the requested bean
|
* @return the requested bean
|
||||||
*/
|
*/
|
||||||
public static <T> T getBean(final Class<T> beanClazz) {
|
public <T> T getBean(final Class<T> beanClazz) {
|
||||||
return context.getBean(beanClazz);
|
return context.getBean(beanClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,15 +70,7 @@ public final class SpringContextHelper {
|
|||||||
* application context
|
* application context
|
||||||
* @return the requested bean
|
* @return the requested bean
|
||||||
*/
|
*/
|
||||||
public static <T> T getBean(final String beanName, final Class<T> beanClazz) {
|
public <T> T getBean(final String beanName, final Class<T> beanClazz) {
|
||||||
return context.getBean(beanName, beanClazz);
|
return context.getBean(beanName, beanClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* method to clear application context.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static void clearContext() {
|
|
||||||
context = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user