我为geoIP本地化写了一个请求过滤器。它的工作方式是我请求外部服务进行本地化,然后将信息写入JCR,进入专用工作区进行缓存/存储。
在作者实例上,这有效,但在公共实例上,我经常会遇到AccessDeniedException。我可能需要使用JCR进行身份验证,我也尝试使用magnolia.properties文件中的crendentials:
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 Task,配置如下:
tasks.add(new FilterOrderingTask("geoIp", new String[] { "contentType", "login", "logout", "csrfSecurity",
"range", "cache", "virtualURI" }));
我错过了什么?
在公共实例上写入Magnolia中的JCR是正确的吗?
答案 0 :(得分:1)
是的,这不行:D
您的过滤器是在Magnolia的过滤器链中配置还是直接在web.xml
中配置?它需要存在于过滤器链中,并且需要在安全过滤器之后在链的某处进行配置,以便用户已经过身份验证。
然后,您只需致电MgnlContext.getJCRSession("workspace_name")
即可访问回购并执行您需要的任何操作。
HTH,
扬