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) 个答案