В настоящее время у меня есть веб-сервис 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 или других аннотаций.
Есть идеи?
Спасибо!