【问题标题】:AccessDeniedException when writing into JCR (JackRabbit) [Magnolia]写入 JCR (JackRabbit) [Magnolia] 时出现 AccessDeniedException
【发布时间】:2015-06-16 08:45:20
【问题描述】:

我为 geoIP 本地化编写了一个请求过滤器。它的工作方式是我请求外部服务进行本地化,然后将信息写入 JCR,写入缓存/存储的专用工作区。

在作者实例上这是可行的,但在公共实例上我经常收到 AccessDeniedException。我可能需要通过 JCR 进行身份验证,我也尝试过,使用 magnolia.properties 文件中的凭据:

magnolia.connection.jcr.userId = username
magnolia.connection.jcr.password = password

这个验证码:

Session session = MgnlContext.getJCRSession(WORKSPACE_IP_ADDRESSES);
session.impersonate(new SimpleCredentials("username", "password".toCharArray()));

我有 this xml 来引导过滤器和一个 FilterOrdering 任务,配置如下:

tasks.add(new FilterOrderingTask("geoIp", new String[] { "contentType", "login", "logout", "csrfSecurity",
            "range", "cache", "virtualURI" }));

我错过了什么?

在公共实例上写入 Magnolia 中的 JCR 的正确方法是什么?

【问题讨论】:

    标签: jcr magnolia


    【解决方案1】:

    是的,那行不通:D

    您的过滤器是在 Magnolia 的过滤器链中配置还是直接在 web.xml 中配置?它需要存在于过滤器链中,并且需要在安全过滤器之后的某个位置进行配置,以便用户已经通过身份验证。
    然后你可以简单地调用MgnlContext.getJCRSession("workspace_name") 来访问 repo 并做任何你需要的事情。

    HTH,
    一月

    【讨论】:

    • 我在过滤器链中配置了过滤器,我在问题中添加了更多信息。我还从头开始重新部署所有内容,并看到过滤器排序失败info.magnolia.module.InstallContextImpl : > Could not sort filter geoIp. It should be positioned after [contentType, login, logout, csrfSecurity, range, cache, virtualURI]
    • 您好 Jan,根据文档,我配置了过滤器,它现在位于 servlet 过滤器之后,因此在负责 AccessDenied 的 securityCallback 过滤器之后。在我的公共实例上它仍然不起作用,我仍然得到一个 AccessDeniedException。
    • 还是公共实例根本不允许写?
    • 不,作为匿名用户,你不能写。要么验证用户身份,要么需要在MgnlContext.doInSystemContext(new Op(){...}) 等系统上下文中执行写入操作,但是如果您这样做,请格外小心您所写的内容。你不想让任何人在你的公共回购中写任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多