Usually, the long url is generated by <portlet:actionURL/>, a common scenario is that :
<form name="<portlet:namespace/>JMSForm" action="<portlet:actionURL/>" method="POST">
I have a suggestion, maybe it would solve it for ever.
On the client side, we could put the url generated by <portlet:actionURL/> as a hidden element, like below, so that the url in the browser is always like "http://localhost:8080/console/portal"
<form name="<portlet:namespace/>JMSForm" action="/console/portal" method="POST">
<input type="hidden" value="<portlet:actionURL/>" name="hiddenUrl"/>
On the server side, we add a filter to /console/portal, in the filter, we could build a customized requestwrapper and override some methods in it, so that for Pluto, it does the process as usual.
For the scenario below, we could change it to form submit if needed
<a href="<portlet:actionURL portletMode="view">
<portlet:param name="mode" value="list-before" />
Another point that need to pay attention is that if the form submit is uploading file, for it, we should be care.
I am not sure whether I miss something or make a mistake , thanks for any comment !