Hi devs,

I propose to move servlet filters out of the old core to
xwiki-container-servlet.


There are 3 filters,

com.xpn.xwiki.web.SetCharacterEncodingFilter
com.xpn.xwiki.web.SavedRequestRestorerFilter
com.xpn.xwiki.web.ActionFilter

They are almost self-contained (except for ActionFilter, see a note
later) and are easy to move. Moreover, SavedRequestRestorerFilter offers
functionality to save the request, that might also be useful in other
places (like csrf-token). There is (currently) no need for portlet
filters, so moving filters into a separate module doesn't seem to be
worth it.

Since the filters are not used directly, I'd move them into
org.xwiki.container.servlet.filters.internal and public methods used
elsewhere into org.xwiki.container.servlet.filters.

Note that xwiki-core would become dependent on xwiki-container-servlet
(it currently depends on container-api), but it shouldn't be a problem.


In more detail,

* SetCharacterEncodingFilter would be moved as is to filters.internal.

* SavedRequestRestorerFilter would be split into the actual filter and
  SavedRequestManager that would contain the static methods
    String getOriginalUrl(HttpServletRequest)
    String saveRequest(HttpServletRequest)
    String getRequestIdentifier()
  SavedRequestManager could also be a component, but it would make it
  more complicated to use from the filter.

* ActionFilter should be moved to filters.internal too, but it uses
  XWiki.stripSegmentFromPath(String, String) to parse the URL and
  replace the action part by the stored value.


There are 2 other copies of the URL parsing code that uses
stripSegmentFromPath(...), in XWiki.getDocumentReference(...) and
XWiki.getXWiki(...), I can think of 3 alternatives:
1. Leave ActionFilter in the core
2. Move URL parsing code into xwiki-url, i.e. add/implement missing
   methods to create XWikiURL from string representation and extract
   host, action, document reference and parameters from it.
3. Move stripSegmentFromPath(...) to xwiki-container-servlet too


I'm +1 for 2, since it's the cleanest option.


WDYT?


Thanks,
Alex
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to