Как получить имя сервера и порт с использованием HttpServletRequest, не передавая это в качестве аргумента - PullRequest
0 голосов
/ 10 мая 2019

сегодня я столкнулся с интересной проблемой. Я хочу провести процесс регистрации пользователя с уникальной ссылкой.

Моя регистрационная ссылка построена с параметрами 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-адреса. Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...