Custom JACC Example for JBoss Portal 2.2
This wiki contains a sample PortalJaccPolicy class that demonstrates how you can override
the standard portal security implementation with authorization checks of your own. This wiki assumes you've already read: http://docs.jboss.com/jbportal/v2.2/reference-guide/en/html/security.html and you want to actually override the "implies" method in the PortalJaccPolicy class.
Brief JBoss Portal 2.2 Security Summary
By default, authentication actually occurs in org.jboss.portal.core.security.jaas.ModelLoginModule. This JAAS extension class authenticates the user.
Portal authorization starts with a copy of the app server's default JACC implementation class that's re-packaged in the jboss-portal.sar, org.jboss.portal.security.impl.jacc.PortalJaccPolicy, and it doesn't do any authorization. These 3 external permission type classes are actually JACC extensions that handle the authorization for access to various portal framework objects:
org.jboss.portal.core.security.PortalObjectPermission,
org.jboss.portal.core.security.InstancePermission,
org.jboss.portal.core.security.ComponentPermission
Each class handles the appropriate permission association at the appropriate portal object level. So, the PortalObjectPermission class handles authorization of portal objects, InstancePermission handles portlet instances, etc...
Custom PortalJaccPolicy Sample
Attached is a zip file that contains a PortalJaccPolicy.java file and build scripts that'll deploy the custom portal JACC implementation to a JBoss Portal 2.2 server. Key features include:
Overrides the implies() method and calls a silentAuthorization() method
silentAuthorization() method checks a properties file for portal object definitions for an "Adminstrator" role. This is a bit hard-coded, but the intention is to demonstrate that this JACC override will actually work.
Properties file key=role
Properties file value=comma separated list of portlets and portal pages user has access to
You can delete entries from the properties file and see the portal tabs dissapear.
Also, you can create a new portal page
Add a portlet window and portlet instance to that portal page
Change the permissions so that all cannot "VIEW"
Add the portal objects to the properties file portal object value list
Hit the portal page and see that you now have access
What Now???
Keep an eye on this forum because any changes/enhancements to the current JACC implementation are likely to be hashed out here: http://jboss.com/index.html?module=bb&op=viewtopic&t=73586&start=0&postdays=postDays&postorder=postOrder&highlight=highlight.
Comments