有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用HttpServletRequest获得服务器名称和端口,而不将此作为参数传递

今天我遇到了一个有趣的问题。我想用一个唯一的链接进行用户注册

我的注册链接是使用serverName、serverPort和contextPath参数构建的。我需要这三个随机生成的UUID参数来创建一个唯一的URL,它将负责用户注册。目前,我正在将HttpServletRequest作为控制器方法中的一个参数传递,毕竟,我开始怀疑这是否是在控制器端进行URL生成的良好实践

用户服务:

    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);

    }

用户控制器:

    @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。谢谢你的帮助


共 (0) 个答案