我正在AEM中编写一个OSGI服务组件。我想在服务组件的activate方法中获取当前域名。
目前,我正在编写一个构造方法,从引用class/service/model/servlet获得请求,以初始化"request"类对象,并使用该请求对象获得服务器名称
private SlingHttpServletRequest request;
private String domainName;
@Override
public void construct(final SlingHttpServletRequest request) {
this.request = request;
}
@Override
public void setDomainName(){
this.domainName = request.getServerName();
}
并且CCD_ 1被用于多种服务方法的实现中。
所以,我必须调用2个额外的服务方法,
- 构造-初始化全局
request
对象 - setDomainName-初始化要在所有其他服务方法中使用的
domainName
全局对象
是否在activate方法中获取domainName,这样我就不必调用以上两个方法来使用该服务了。
注意:-我无法为域名创建OSGI配置,因为此域名已被用作密钥属性,以识别给定工厂的OSGI配置
由于AEM发布服务器可能用于多个域,因此无法"知道";正确的域而没有得到请求。在请求到达AEM之前,web服务器和CDN可能也会发挥一些作用。
除此之外,activate方法不会在每次使用服务时调用,因为这些组件会被多次使用。
所以我认为没有,当组件被激活时,没有办法猜测下一个传入请求的域是什么。
BR,Oliver
要添加到@OliverGeberts答案,可以将此信息添加到内容(即语言根的页面属性(或某种租户配置中。