Инъекция объектов по запросу в Spring RestController с использованием HandlerInterceptorAdapter - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время у меня есть веб-сервис REST, использующий Spring RestController.Я реализовал HandlerInterceptorAdapter, где я хочу установить некоторые пользовательские данные.

Код выглядит так:

@Component
public class UserContextInterceptor extends HandlerInterceptorAdapter {

  @Autowired
  private UserContext userContext;

  @Override
  public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    //set userContext here
    userContext.setLoginId("loginId");

    return true;
  }
}

Вот RestController:

@RestController
public class MyController {

  @Autowired
  private MyService myService;

  @GetMapping
  public Response processRequest(Request request) {
    return myService.processRequest(request);
  }
}

Вот Служба.Это просто вызывается контроллером:

@Service
public class MyService {

  @Autowired
  private UserContext userContext;

  public Response processRequest(Request request) {
    //process request using userContext
    if (userContext.getLoginId() == null)
      throw new InvalidloginException("No login id!");
    //do something else
    return new Response();
  }
}

UserContext - это просто POJO, содержащий пользовательские поля.

В моей реализации, UserContext, я думаю, не является потокобезопасным.Объект UserContext будет переопределяться при каждом поступлении запроса.Я хотел бы знать, как правильно автоматически подключать / аннотировать его таким образом, чтобы я хотел, чтобы новый UserContext появлялся каждый раз при поступлении запроса. И этот UserContext был бы правильно добавлен в MyService.Это означает, что во всех вызовах в MyService.processRequest всегда вводится другой UserContext.

Одним из решений, о котором я думал, было просто передать объект UserContext в метод MyService.processRequest ().Мне было просто интересно, если это можно решить с помощью Springw AutoWire или других аннотаций.

Есть идеи?

Спасибо!

...