В соответствии с подходом многопользовательской базы данных hibernate https://dzone.com/articles/spring-boot-hibernate-multitenancy-implementation, Я занимаюсь разработкой многопользовательского приложения, в котором около 500 пользователей могут войти в систему в любое время. Пожалуйста, кто-нибудь поможет мне и опишет мне способ передать зарегистрированному пользователю от весенней безопасности до CurrentTenantIdentifierResolverclass.
Получение текущего зарегистрированного клиента из Spring Spring и установка значения в локальный модификатор потока
@Controller
public class MainController {
@Autowired
private CourseService courseService;
@Autowired
private StudentDao studentDao;
@Autowired
private UserDao userDao;
@Autowired
private Tenant tenant;
@RequestMapping(value={"/","/home"})
public ModelAndView getPage(Authentication auth){
String tenantId = auth.getName();
String myTenantId=tenantId;
Modifier.setTenantId(myTenantId);
System.out.println(tenant.getTenantId());
ModelAndView model=new ModelAndView("page");
return model;
}
Это локальный класс потокакоторый содержит текущий вошедший в систему арендатор
public class Modifier {
@Autowired
private Tenant tenant;
private static final ThreadLocal<String> CONTEXT = new ThreadLocal<>
();
public static void setTenantId(String tenantId) {
CONTEXT.set(tenantId);
}
public static String getTenantId() {
return CONTEXT.get();
}
public static void clear() {
CONTEXT.remove();
}
}
Здесь я пытаюсь получить значение арендатора из локального потока, но после входа в систему я получаю значение арендатора как ноль
package com.domain.multitenancy;
public class CurrentTenantIdentifierResolverimpl implements
CurrentTenantIdentifierResolver {
String DEFAULT_TENANT_SCHEMA = "tenantId1";
@Override
public String resolveCurrentTenantIdentifier() {
String tenantId=Modifier.getTenantId();
if (tenantId == null) {
return DEFAULT_TENANT_SCHEMA;
}
return tenantId;
}
@Override
public boolean validateExistingCurrentSessions() {
// TODO Auto-generated method stub
return true;
}
}
также использовал этот код, но из-за статичности при подключении нескольких арендаторов экземпляр обновлялся каждый раз и не отображал правильную базу данных, связанную с пользователем, показывающую другую базу данных
Общественный класс Арендатор {
private static String tenantId;
public static String getTenantId() {
return tenantId;
}
public static void setTenantId(String tenantId) {
this.tenantId = tenantId;
}