Craig McClanahan schrieb:
In general, security frameworks that try to mimic container managed security only do their checks on the initial request URI, not on RequestDispatcher.forward() calls. A couple of approaches to consider:

* If you are running on a Servlet 2.4 or later container,
  you can configure the filter to run on forwards as well
  as the initial request.  I don't know if AcegiSecurity is
  set up to work in this manner, but it's worth a try.

* Conceptually, it sounds like you are trying to apply
  access control on the destination of a navigation rule.
  One way to implement this might be to do a custom
  NavigationHandler that delegates to the standard one,
  then examines the new viewId and sees if it is acceptable
  for this user.

    My question now is, are there any experience to integrate these
    frameworks with shale?


I know Spring works fine with Shale. I've heard scattered reports of problems with Facelets, and that's high on my list of things to evaluate. I haven't tried AcegiSecurity yet, but there's nothing in Shale that should make it work any differently than it does with MyFaces directly.

Lastly, now that MyFaces 1.1.4 is out, we will be testing and updating the dependency (for the nightly builds of Shale) to use 1.1.4 instead of 1.1.1 --- so that will get a lot of attention. (Shale doesn't care what component library you use, so Tomahawk shouldn't be an issue unless it does wierd things with some of the JSF extension points.)

    Regards.
    Ingo



Craig
Hello Craig,

thank you for the detailed answer. I'm already on the way integrating shale :-).

I configured acegisecurity filter to listen on servlet forwards. But the problem came from facelets, as soon I integrated facelets there were no more forwards during the lifecycle :-(, so the security filter is not informed about view changes. So I also decided to write a custom navigation handler, but within the navigation handler you only have the information about the current viewId and the outcome that was generated, but nothing about the next viewId. Because that is the duty of the navigation handler. And unfortunately there is no specification api to figure out the next viewId and I didn't like to make a hardcoded dependency to myfaces implementation to figure out that next viewId. So I decided to implement a PhaseListener that backup the incoming viewId in the early phases and if this viewId changed before the render-response phase it make a redirect to the new viewId.

Regards
Ingo




Reply via email to