Cache settings
astik <[email protected]>
| Newsgroups | gmane.comp.cms.infoglue.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi all,
It seems there is an error with page cache settings. By default, page
cache key is defined in deliver.properties :
pageKey=$siteNodeId_$languageId_$contentId_$queryString_
$session.principal
With that default parameter, whatever access right I set, the page is
defined by the first user who visit it. When the first user get the
page, the cache is set whater right the user have.
Here are the attributes available in my session :
{
LanguageId=4,
infoglueRemoteUser=administrator,
infogluePrincipal=administrator,
javax.servlet.jsp.jstl.fmt.request.charset=ISO-8859-1,
cmsUserName=administrator
}
So, I guess page cache key should be : $siteNodeId_$languageId_
$contentId_$queryString_$session.infogluePrincipal
After this little change into the ServerNode properties or into page
cache key, it works great, only allowed content are retrieve.
If we want to go farest, I'd like to set the page key so that each
role has a different cache, not each user. This way I could reduce a
lot memory consumption.
The page key is set this way for session attribute :
pageKey = pageKey.replaceAll("\\$session." + sessionAttribute, "" +
session.getAttribute(sessionAttribute));
Is there a way to user session's infogluePrincipal attributes ?
If not, I may need a new attribute into the user session ... I think I
will override ViewPageAction.handleExtranetLogic to be something like
this :
@Override
public boolean handleExtranetLogic(Database db, boolean gateway)
throws SystemException, Exception {
boolean isRedirected = super.handleExtranetLogic(db, gateway);
setRoleKeyIntoSession();
return isRedirected;
}
@Override
public boolean handleExtranetLogic(Database db, Integer repositoryId,
Integer protectedSiteNodeVersionId, boolean protectDeliver, boolean
forceCmsUser) throws SystemException, Exception {
boolean isRedirected = super.handleExtranetLogic(db, repositoryId,
protectedSiteNodeVersionId, protectDeliver, forceCmsUser);
setRoleKeyIntoSession();
return isRedirected;
}
@SuppressWarnings("unchecked")
private void setRoleKeyIntoSession() {
// set the user role into a session attribute
InfoGluePrincipal principal = getInfoGluePrincipal();
if (principal != null) {
String roleKey = "";
List roleList = principal.getRoles();
Iterator<InfoGlueRole> itRole = roleList.iterator();
while (itRole.hasNext()) {
InfoGlueRole infoGlueRole = (InfoGlueRole) itRole.next();
roleKey += infoGlueRole.getName();
}
this.getHttpSession().setAttribute("infogluePrincipalRoles",
roleKey);
}
}
All I have to do is change the actions.xml to make it use my new
ViewPageAction.
My new page cache key will be : $siteNodeId_$languageId_$contentId_
$queryString_$session.infogluePrincipalRole for page that depends on
role (by default, set in serverNodeProperties) and $siteNodeId_
$languageId_$contentId_$queryString_$session.infogluePrincipal for
user specific page (set in sitenode cover).
It would be really cool if this kind of settings could be available
with IG without redefining ViewPageAction.
By the way, the solution to make it work with group is the same.
Any opinion on this feature ?
Tcho
__
Romain
http://blog.astik.info
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf