gpt4 book ai didi

java - Spring boot 在 servlet 上下文之外获取应用程序基础 url

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:12 24 4
gpt4 key购买 nike

设置如下 - 我有一个定时任务会发送验证电子邮件,以便用户:

@Scheduled(cron = " 0 0-59/1 * * * * ")
public void sendVerificationEmails() {
//...
}

在这些电子邮件中,我需要包含一个指向同一个 Web 应用程序的链接。但是,我找不到任何关于如何在没有 servlet 上下文的情况下获取应用程序基本 url 的引用。

奖金

如果我可以在这里设置 thymeleaf 模板解析器来处理这些链接,这也会有所帮助,但为此我需要一个 WebContext,它需要一个 HttpServletRequest 的实例。

最佳答案

假设您的应用程序使用嵌入式 tomcat 服务器,则您的应用程序的 url 可能如下所示:

@Inject
private EmbeddedWebApplicationContext appContext;

public String getBaseUrl() throws UnknownHostException {
Connector connector = ((TomcatEmbeddedServletContainer) appContext.getEmbeddedServletContainer()).getTomcat().getConnector();
String scheme = connector.getScheme();
String ip = InetAddress.getLocalHost().getHostAddress();
int port = connector.getPort();
String contextPath = appContext.getServletContext().getContextPath();
return scheme + "://" + ip + ":" + port + contextPath;
}

这是嵌入式 jetty 服务器的示例:

public String getBaseUrl() throws UnknownHostException {
ServerConnector connector = (ServerConnector) ((JettyEmbeddedServletContainer) appContext.getEmbeddedServletContainer()).getServer().getConnectors()[0];
String scheme = connector.getDefaultProtocol().toLowerCase().contains("ssl") ? "https" : "http";
String ip = InetAddress.getLocalHost().getHostAddress();
int port = connector.getLocalPort();

String contextPath = appContext.getServletContext().getContextPath();
return scheme + "://" + ip + ":" + port + contextPath;
}

关于java - Spring boot 在 servlet 上下文之外获取应用程序基础 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40401383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com