сегодня я столкнулся с интересной проблемой. Я хочу провести процесс регистрации пользователя с уникальной ссылкой.
Моя регистрационная ссылка построена с параметрами serverName, serverPort и contextPath. Мне нужны эти три параметра со случайно сгенерированным UUID для создания уникального URL, который будет отвечать за регистрацию пользователей. В настоящее время я передаю HttpServletRequest в качестве параметра в методе контроллера, и в конце концов я начал задаваться вопросом, является ли это хорошей практикой для генерации URL на стороне контроллера.
UserSevice:
public void register(User user, String appUrl) {
user.setStatus(UserStatus.INACTIVE);
user.setRoles(Collections.singleton(new Role(RoleType.ROLE_USER)));
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
verificationTokenService.sendConfirmationEmail(user, appUrl);
}
UserController:
@PostMapping("/registration")
public ResponseEntity registerUserAccount(
@RequestBody @Valid User user, HttpServletRequest request) {
String appUrl = "http://" + request.getServerName() + ":" +
request.getServerPort() + request.getContextPath();
userService.register(user, appUrl);
return ResponseEntity.ok().build();
}
Я знаю, что могу создать вспомогательный метод, например:
public String getServerName(HttpServletRequest request) {
return request.getServerName();
}
public int getServerPort(HttpServletRequest request) {
return request.getServerPort();
}
public String getContextPath(HttpServletRequest request) {
return request.getContextPath();
}
чтобы получить этот параметр, но все же мне нужно передать HttpServletRequest в качестве параметра, и это является проблемой из-за того, что это интерфейс.
String appUrl =
"http://"
+ getServerName('this method require HttpServletRequest').getServerName()
+ ":"
+ getServerPort('this method require HttpServletRequest').getServerPort()
+ getContextPath('this method require HttpServletRequest').getContextPath();
Текущее решение работает, но меня интересует, есть ли другая возможность получить эти три параметра, не передавая HttpServletRequest в качестве аргумента на стороне контроллера и избегая создания там URL-адреса. Спасибо за любую помощь.