You can dynamically modify portlet caching parameters for a JSR 286 portlet during the render phase.
protected void doHeaders(RenderRequest request, RenderResponse response)
{
response.getCacheControl().setExpirationTime(30);
response.getCacheControl().setPublicScope(false);
}