You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编译含注册Hook的Liferay OSGi Bundle并整合配置功能

将Liferay Hook与可配置OSGi Bundle整合的解决方案

可以将Servlet Filter类型的Hook与可配置应用打包为单个OSGi Bundle(WAB),以下是两种可行方案:

方案一:通过WAB配置整合liferay-hook.xml

如果坚持使用传统Hook配置文件,需调整项目结构和Maven插件配置:

  1. 调整文件位置
    将liferay-hook.xml从webapp/WEB-INF移至src/main/resources/META-INF目录。

  2. 配置maven-bundle-plugin
    在pom.xml中添加以下插件配置,确保Bundle被识别为Liferay WAB并包含Hook配置:

    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>5.1.9</version>
        <extensions>true</extensions>
        <configuration>
            <instructions>
                <Liferay-WAB>true</Liferay-WAB>
                <Include-Resource>
                    src/main/resources/META-INF/liferay-hook.xml,
                    {maven-resources}
                </Include-Resource>
                <Import-Package>
                    javax.servlet.*,
                    com.liferay.portal.kernel.servlet.*,
                    *
                </Import-Package>
                <Bundle-SymbolicName>com.yourcompany.log.app</Bundle-SymbolicName>
                <Bundle-Version>1.0.0</Bundle-Version>
            </instructions>
        </configuration>
    </plugin>
    

方案二:OSGi原生注解注册Filter(推荐)

Liferay 7.x更推荐使用OSGi组件模型注册Servlet Filter,无需依赖liferay-hook.xml,直接在Filter类上添加注解即可,完美整合到你的可配置Bundle中:

import com.liferay.portal.kernel.servlet.BaseFilter;
import org.osgi.service.component.annotations.Component;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

@Component(
    immediate = true,
    property = {
        "servlet-filter-name=My Hook",
        "url-pattern=/*",
        "before-filter=SSO Open SSO Filter"
    },
    service = Filter.class
)
public class MyHook extends BaseFilter {

    @Override
    protected void processFilter(
        ServletRequest request, ServletResponse response, FilterChain filterChain
    ) throws IOException, ServletException {
        // 实现你的日志逻辑
        filterChain.doFilter(request, response);
    }
}

验证部署

  • 执行mvn clean install编译Bundle
  • 将JAR包放入Liferay的osgi/modules目录
  • 通过Gogo Shell执行lb | grep "你的Bundle名称"确认Bundle处于Active状态
  • 查看Liferay日志验证Filter是否生效

内容的提问来源于stack exchange,提问作者Dalimil Rozprým

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:45:23