Как получить текущего зарегистрированного клиента из Spring Security и сохранить его в локальном потоке, а затем передать значение в текущий класс распознавателя клиента - PullRequest
0 голосов
/ 12 октября 2019

В соответствии с подходом многопользовательской базы данных 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;



}
...