ServletUtils.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.web.lib.mvc;
- import java.lang.reflect.InvocationTargetException;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import java.util.concurrent.ConcurrentHashMap;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.commons.lang3.SerializationUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import org.openspcoop2.core.commons.ISearch;
- import org.openspcoop2.protocol.sdk.properties.IConsoleHelper;
- import org.openspcoop2.utils.BooleanNullable;
- import org.openspcoop2.utils.resources.ClassLoaderUtilities;
- import org.openspcoop2.web.lib.mvc.Dialog.BodyElement;
- import org.openspcoop2.web.lib.mvc.properties.beans.ConfigBean;
- import org.openspcoop2.web.lib.users.dao.User;
- import org.slf4j.Logger;
- import org.springframework.http.HttpStatus;
- /**
- * ServletUtils
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ServletUtils {
-
- private ServletUtils() {}
- /* ------ STRUTS -FORWARD -ERROR */
- public static ActionForward getStrutsForwardError(Logger log,Throwable e,PageData pd,HttpServletRequest request, HttpSession session, GeneralData gd, ActionMapping mapping, String objectName,ForwardParams forwardType){
- return getStrutsForwardError(log, e, pd, request, session, gd, mapping, objectName, forwardType, Costanti.MESSAGGIO_SISTEMA_NON_DISPONIBILE);
- }
-
- public static ActionForward getStrutsForwardError(Logger log,Throwable e,PageData pd,HttpServletRequest request, HttpSession session, GeneralData gd, ActionMapping mapping, String objectName,ForwardParams forwardType,String message){
- if(e!=null)
- log.error("SistemaNonDisponibile: "+e.getMessage(), e);
- else
- log.error("SistemaNonDisponibile");
- pd.disableEditMode();
- pd.setMessage(message);
- pd.setMostraLinkHome(true);
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
- return ServletUtils.getStrutsForwardGeneralError(mapping, objectName, forwardType);
- }
- /* ------ STRUTS - FORWARD ---- */
- private static String getStrutsForwardName(String objectName,ForwardParams forwardParams){
- String forward = objectName;
- if(TipoOperazione.ADD.equals(forwardParams.getTipoOperazione())){
- forward = forward + "Add";
- }
- else if(TipoOperazione.CHANGE.equals(forwardParams.getTipoOperazione())){
- forward = forward + "Change";
- }
- else if(TipoOperazione.DEL.equals(forwardParams.getTipoOperazione())){
- forward = forward + "Del";
- }
- else if(TipoOperazione.LIST.equals(forwardParams.getTipoOperazione())){
- forward = forward + "List";
- }
- else if(TipoOperazione.OTHER.equals(forwardParams.getTipoOperazione())){
- forward = forward + forwardParams.getOtherContext();
- }
- return forward;
- }
- public static ActionForward getStrutsForwardEditModeInProgress(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams)+Costanti.STRUTS_FORWARD_FORM);
- }
- public static ActionForward getStrutsForwardEditModeConfirm(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams)+Costanti.STRUTS_FORWARD_CONFIRM_FORM);
- }
- public static ActionForward getStrutsForwardEditModeFinished(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams)+Costanti.STRUTS_FORWARD_OK);
- }
- public static ActionForward getStrutsForwardEditModeCheckError(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams)+Costanti.STRUTS_FORWARD_CHECK_ERROR);
- }
- public static ActionForward getStrutsForwardGeneralError(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(objectName+Costanti.STRUTS_FORWARD_ERRORE_GENERALE);
- }
- public static ActionForward getStrutsForward(ActionMapping mapping,String objectName,ForwardParams forwardParams){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams));
- }
- public static ActionForward getStrutsForward(ActionMapping mapping,String objectName,ForwardParams forwardParams,String suffix){
- return mapping.findForward(getStrutsForwardName(objectName, forwardParams)+suffix);
- }
- /* ------ CHECKBOX ---- */
-
- public static String boolToCheckBoxStatus(Boolean value) {
- if (value == null) value = false;
-
- return value ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
- }
-
- public static boolean isCheckBoxEnabled(String value){
- return Costanti.CHECK_BOX_ENABLED.equals(value) ||
- Costanti.CHECK_BOX_ENABLED_TRUE.equalsIgnoreCase(value) ||
- Costanti.CHECK_BOX_ENABLED_ABILITATO.equalsIgnoreCase(value);
- }
- public static void setCheckBox(DataElement de,String checkBoxValue){
- if(isCheckBoxEnabled(checkBoxValue)){
- de.setSelected(Costanti.CHECK_BOX_ENABLED);
- }
- else{
- de.setSelected(Costanti.CHECK_BOX_DISABLED);
- }
- }
- public static void setCheckBox(DataElement de,boolean checkBoxValue){
- if(checkBoxValue){
- de.setSelected(Costanti.CHECK_BOX_ENABLED);
- }
- else{
- de.setSelected(Costanti.CHECK_BOX_DISABLED);
- }
- }
- /* ------ EDIT - SAVE MODE ---- */
- public static DataElement getDataElementForEditModeInProgress(){
- return Costanti.DATA_ELEMENT_HIDDENT_EDIT_MODE_IN_PROGRESS;
- }
- public static DataElement getDataElementForEditModeFinished(){
- return Costanti.DATA_ELEMENT_HIDDENT_EDIT_MODE_END;
- }
- public static Parameter getParameterForEditModeFinished(){
- return Costanti.PARAMETER_EDIT_MODE_END;
- }
- public static boolean isEditModeInProgress(String editMode){
- return !Costanti.DATA_ELEMENT_EDIT_MODE_VALUE_EDIT_END.equals(editMode);
- }
- public static boolean isEditModeFinished(String editMode){
- return !Costanti.DATA_ELEMENT_EDIT_MODE_VALUE_EDIT_END.equals(editMode);
- }
- public static boolean isSearchDone(IConsoleHelper consoleHelper){
- try {
- String v = consoleHelper.getParameter(Costanti.PARAMETER_NAME_SEARCH_LIST_DONE);
- return "true".equals(v); // listElement.jsp: addHidden(form, '_searchDone' , true);
- }catch(Exception e) {}
- return false;
- }
- /* ------ PAGE DATA (TITLE) ---- */
- public static Parameter getParameterAggiungi() {
- return new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_AGGIUNGI, null);
- }
-
- public static void setPageDataTitle_ServletFirst(PageData pd,String t1Label, String t1Url){
- setPageDataTitle(pd,
- new Parameter(t1Label,t1Url));
- }
- public static void setPageDataTitle_ServletAdd(PageData pd,String t1Label, String t1Url){
- setPageDataTitle(pd,
- new Parameter(t1Label,t1Url),
- new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_AGGIUNGI,null));
- }
- public static void setPageDataTitle_ServletChange(PageData pd,String t1Label, String t1Url, String t2Label){
- setPageDataTitle(pd,
- new Parameter(t1Label,t1Url),
- new Parameter(t2Label,null));
- }
- public static void setPageDataTitle(PageData pd, List<Parameter> listaParametri){
- setPageDataTitle(pd, listaParametri.toArray(new Parameter[listaParametri.size()]));
- }
- public static void setPageDataTitle(PageData pd, Parameter ... param){
- setPageDataTitle(pd,false,param);
- }
- public static void appendPageDataTitle(PageData pd, Parameter ... param){
- setPageDataTitle(pd,true,param);
- }
- private static void setPageDataTitle(PageData pd, boolean append, Parameter ... param){
- List<GeneralLink> titlelist = null;
- if(!append){
- titlelist = new ArrayList<>();
- }
- else{
- titlelist = pd.getTitleList();
- }
- for (int i = 0; i < param.length; i++) {
- GeneralLink tl = new GeneralLink();
- if(param[i].getName()!=null){
- tl.setLabel(param[i].getName());
- }
- if(param[i].getValue()!=null){
- tl.setUrl(param[i].getValue());
- }
- titlelist.add(tl);
- }
- pd.setTitleList(titlelist);
- }
-
-
-
- /* ------ PAGE DATA (DISABLE EDIT MODE) ---- */
-
- public static void disableEditMode(PageData pd){
- pd.disableEditMode();
- }
-
-
- /* ------ PAGE DATA (SEARCH) ---- */
-
- public static void enabledPageDataSearch(PageData pd,String soggetto,String search){
- pd.setSearch(Costanti.SEARCH_ENABLED);
- pd.setSearchDescription(soggetto+" contenenti la stringa '" + search + "'");
- }
- public static void disabledPageDataSearch(PageData pd){
- pd.setSearch(Costanti.SEARCH_DISABLED);
- }
- /* ------ DATA ELEMENT ---- */
- public static void setDataElementVisualizzaLabel(DataElement de){
- setDataElementVisualizzaLabel(de, null);
- }
- public static void setDataElementVisualizzaLabel(DataElement de,Long count){
- if(count!=null){
- de.setValue(Costanti.LABEL_VISUALIZZA+"(" + count + ")");
- } else {
- de.setValue(Costanti.LABEL_VISUALIZZA);
- }
- }
- public static void setDataElementVisualizzaCustomLabel(DataElement de, String customLabel){
- setDataElementVisualizzaCustomLabel(de, customLabel,null);
- }
- public static void setDataElementVisualizzaCustomLabel(DataElement de, String customLabel, Long count){
- if(count!=null){
- de.setValue(Costanti.LABEL_VISUALIZZA+ " "+customLabel+" (" + count + ")");
- } else {
- de.setValue(Costanti.LABEL_VISUALIZZA+ " "+customLabel );
- }
- }
- public static void setDataElementCustomLabel(DataElement de, String customLabel){
- setDataElementCustomLabel(de, customLabel,null,null);
- }
- public static void setDataElementCustomLabel(DataElement de, String customLabel,Long count){
- setDataElementCustomLabel(de, customLabel,count,null);
- }
- public static void setDataElementCustomLabel(DataElement de, String customLabel,String msg){
- setDataElementCustomLabel(de, customLabel,null,msg);
- }
- public static void setDataElementCustomLabel(DataElement de, String customLabel, Long count, String msg){
- if(count!=null){
- de.setValue(customLabel+" (" + count + ")");
- } else if(msg!=null){
- de.setValue(customLabel+" (" + msg + ")");
- } else {
- de.setValue(customLabel);
- }
- }
-
-
- public static String getTabIdFromRequestAttribute(HttpServletRequest request) {
- Object idTabObj = request.getAttribute(Costanti.PARAMETER_TAB_KEY);
-
- if(idTabObj != null)
- return (String) idTabObj;
-
- return null;
- }
-
- /* ------ SESSION ---- */
-
- public static void addListElementIntoSession(HttpServletRequest request, HttpSession session,String objectName, List<Parameter> parameters){
- Parameter[] parameter = parameters != null ? parameters.toArray(new Parameter[parameters.size()]) : null;
- addListElementIntoSession(request, session, objectName, parameter);
- }
- public static void addListElementIntoSession(HttpServletRequest request, HttpSession session,String objectName, Parameter ... parameter){
- ListElement listElement = new ListElement();
- listElement.setOggetto(objectName);
- if(parameter!=null && parameter.length>0){
- for (int i = 0; i < parameter.length; i++) {
- if(parameter[i].getValue()==null){
- listElement.addParameter(parameter[i].getName(), "");
- }else{
- listElement.addParameter(parameter[i].getName(), parameter[i].getValue());
- }
- }
- }
- setObjectIntoSession(request, session, listElement, Costanti.SESSION_ATTRIBUTE_LIST_ELEMENT);
- }
- public static void setGeneralAndPageDataIntoSession(HttpServletRequest request, HttpSession session,GeneralData gd,PageData pd){
- setGeneralAndPageDataIntoSession(request, session, gd, pd, false);
- }
- public static void setGeneralAndPageDataIntoSession(HttpServletRequest request, HttpSession session,GeneralData gd,PageData pd,boolean readOnlyDisabled){
- // if(readOnlyDisabled==false){
- // /*
- // CON UN UNICO INTERVENTO SI OTTIENE IL READ ONLY
- //
- // IN PRATICA RECUPERO L'UTENZA DALLA SESSIONE
- // SE POSSIEDE IL PERMESSO READ-ONLY ('R' indica che tutte le maschere visualizzate tramite gli altri permessi sono in read-only mode)
- // DEVE POI ESSERE GESTITA NEL FILTRO DI AUTORIZZAZIONE IL CONTROLLO CHE UN UNTENTE IN READ ONLY NON RICHIEDA UNA ELIMINAZIONE, UNA ADD O UNA MODIFICA
- // */
- // pd.disableEditMode();
- // pd.setAddButton(false);
- // pd.setRemoveButton(false);
- // pd.setSelect(false);
- // pd.setAreaBottoni(null);
- // pd.setBottoni(null);
- // pd.setInserisciBottoni(false);
- // }
- //
- setObjectIntoSession(request, session, gd, Costanti.SESSION_ATTRIBUTE_GENERAL_DATA);
- setObjectIntoSession(request, session, pd, Costanti.SESSION_ATTRIBUTE_PAGE_DATA);
- }
- public static PageData getPageDataFromSession(HttpServletRequest request, HttpSession session){
- return getObjectFromSession(request, session, PageData.class, Costanti.SESSION_ATTRIBUTE_PAGE_DATA);
- }
- public static boolean existsSearchObjectFromSession(HttpServletRequest request, HttpSession session) {
- return getObjectFromSession(request, session, ISearch.class, Costanti.SESSION_ATTRIBUTE_RICERCA) != null;
- }
-
- public static ISearch getSearchObjectFromSession(HttpServletRequest request, HttpSession session, Class<?> searchImpl) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
- ISearch ricerca = getObjectFromSession(request, session, ISearch.class, Costanti.SESSION_ATTRIBUTE_RICERCA);
- if (ricerca == null) {
- ricerca = (ISearch) ClassLoaderUtilities.newInstance(searchImpl);
- }
- return ricerca;
- }
- public static void setSearchObjectIntoSession(HttpServletRequest request, HttpSession session,ISearch ricerca){
- setObjectIntoSession(request, session, ricerca, Costanti.SESSION_ATTRIBUTE_RICERCA);
- }
- public static void removeSearchObjectFromSession(HttpServletRequest request, HttpSession session){
- removeObjectFromSession(request, session, ISearch.class, Costanti.SESSION_ATTRIBUTE_RICERCA);
- }
- public static String getSearchFromSession(ISearch ricerca, int idLista){
- String search = (Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
- return search;
- }
- private static String getKeyRisultatiRicerca(int idLista) {
- return Costanti.SESSION_ATTRIBUTE_RISULTATI_LISTA+"_"+idLista;
- }
- public static void setRisultatiRicercaIntoSession(HttpServletRequest request, HttpSession session, int idLista, List<?> risultatiRicerca){
- setObjectIntoSession(request, session, risultatiRicerca, getKeyRisultatiRicerca(idLista));
- }
- @SuppressWarnings("unchecked")
- public static <T> List<T> getRisultatiRicercaFromSession(HttpServletRequest request, HttpSession session, int idLista, Class<T> classType){
- return getObjectFromSession(request, session, List.class, getKeyRisultatiRicerca(idLista));
- }
- public static List<?> removeRisultatiRicercaFromSession(HttpServletRequest request, HttpSession session, int idLista){
- Object o = removeObjectFromSession(request, session, List.class, getKeyRisultatiRicerca(idLista));
- if(o!=null) {
- return (List<?>) o;
- }
- return null;
- }
-
- public static String getUserLoginFromSession(HttpSession session){
- String userLogin = (String) session.getAttribute(Costanti.SESSION_ATTRIBUTE_LOGIN);
- return userLogin;
- }
- public static void setUserLoginIntoSession(HttpSession session,String userLogin){
- session.setAttribute(Costanti.SESSION_ATTRIBUTE_LOGIN, userLogin);
- }
- public static void removeUserLoginFromSession(HttpSession session){
- session.removeAttribute(Costanti.SESSION_ATTRIBUTE_LOGIN);
- }
- public static User getUserFromSession(HttpServletRequest request, HttpSession session){
- return getObjectFromSession(request, session, User.class, Costanti.SESSION_ATTRIBUTE_USER);
- }
- public static void setUserIntoSession(HttpServletRequest request, HttpSession session,User user){
- setObjectIntoSession(request, session, user, Costanti.SESSION_ATTRIBUTE_USER);
- }
- public static void removeUserFromSession(HttpServletRequest request, HttpSession session){
- removeObjectFromSession(request, session, Costanti.SESSION_ATTRIBUTE_USER);
- }
- public static Boolean getContaListeFromSession(HttpSession session){
- Boolean contaListe = (Boolean) session.getAttribute(Costanti.SESSION_ATTRIBUTE_CONTA_LISTE);
- return contaListe;
- }
- public static void setContaListeIntoSession(HttpSession session,Boolean contaListe){
- session.setAttribute(Costanti.SESSION_ATTRIBUTE_CONTA_LISTE, contaListe);
- }
- public static void removeContaListeFromSession(HttpSession session){
- session.removeAttribute(Costanti.SESSION_ATTRIBUTE_CONTA_LISTE);
- }
- public static Boolean getConfigurazioniPersonalizzateFromSession(
- HttpSession session) {
- return(Boolean) session.getAttribute(Costanti.SESSION_ATTRIBUTE_CONFIGURAZIONI_PERSONALIZZATE);
- }
- public static BooleanNullable getBooleanAttributeFromSession(String attributeName, HttpSession session, HttpServletRequest request) {
- return getBooleanAttributeFromSession(attributeName,session,request,null);
- }
- public static BooleanNullable getBooleanAttributeFromSession(String attributeName, HttpSession session, HttpServletRequest request, Boolean defaultValue) {
- Boolean obj = getObjectFromSession(request, session, Boolean.class, attributeName);
- // Object obj = session.getAttribute(attributeName);
- if(obj == null) {
- if(defaultValue==null) {
- return BooleanNullable.NULL();
- }
- else {
- return defaultValue ? BooleanNullable.TRUE() : BooleanNullable.FALSE();
- }
- }
- else {
- return obj ? BooleanNullable.TRUE() : BooleanNullable.FALSE();
- }
- }
- @SuppressWarnings("unchecked")
- public static void setObjectIntoSession(HttpServletRequest request, HttpSession session,Object obj, String objectName){
- if(objectName.startsWith(Costanti.SESSION_ATTRIBUTE_TAB_KEY_PREFIX)) {
- // lettura dalla sessione associata all'id del tab
- String tabId = (String) request.getAttribute(Costanti.PARAMETER_TAB_KEY);
-
- String prevTabId = request.getParameter(Costanti.PARAMETER_PREV_TAB_KEY);
-
- Map<String,Map<String, Object>> sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
-
- if(sessionMap == null) {
- sessionMap = new ConcurrentHashMap<String, Map<String,Object>>();
- }
-
- Map<String, Object> mapTabId = null;
- if(sessionMap.containsKey(tabId)) {
- mapTabId = sessionMap.get(tabId);
-
- } else {
- // primo accesso copio le informazioni dalla mappa relativa al tab precedente
- copiaAttributiSessioneTab(session, prevTabId, tabId);
- sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
- mapTabId = sessionMap.get(tabId);
- }
-
- mapTabId.put(objectName, obj);
-
- session.setAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP,sessionMap);
- return;
- }
-
- session.setAttribute(objectName,obj);
- }
- public static void removeObjectFromSession(HttpServletRequest request, HttpSession session,String objectName){
- removeObjectFromSession(request, session, null, objectName, false);
- }
-
- @SuppressWarnings("unchecked")
- public static <T> T getObjectFromSession(HttpServletRequest request, HttpSession session,Class<T> objectClass, String objectName){
- if(objectName.startsWith(Costanti.SESSION_ATTRIBUTE_TAB_KEY_PREFIX)) {
-
- // lettura dalla sessione associata all'id del tab
- String tabId = (String) request.getAttribute(Costanti.PARAMETER_TAB_KEY);
-
- String prevTabId = request.getParameter(Costanti.PARAMETER_PREV_TAB_KEY);
-
- Map<String,Map<String, Object>> sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
-
- if(sessionMap == null) {
- sessionMap = new ConcurrentHashMap<String, Map<String,Object>>();
- }
-
- Map<String, Object> mapTabId = null;
- if(sessionMap.containsKey(tabId)) {
- mapTabId = sessionMap.get(tabId);
-
- } else {
- // primo accesso copio le informazioni dalla mappa relativa al tab precedente
- copiaAttributiSessioneTab(session, prevTabId, tabId);
- sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
- mapTabId = sessionMap.get(tabId);
- }
-
- if(mapTabId.containsKey(objectName))
- return objectClass.cast(mapTabId.get(objectName));
-
- // leggi dall request
- // if(request != null) {
- // String parameterValue = request.getParameter(objectName);
- //
- // if(parameterValue != null) {
- // return objectClass.cast(parameterValue);
- // }
- // }
- }
-
- // comportamento normale
- Object obj = session.getAttribute(objectName);
- if(obj == null)
- return null;
- return objectClass.cast(obj);
- }
-
- @SuppressWarnings("unchecked")
- public static Object getObjectFromSession(HttpServletRequest request, HttpSession session, String objectName){
- if(objectName.startsWith(Costanti.SESSION_ATTRIBUTE_TAB_KEY_PREFIX)) {
-
- // lettura dalla sessione associata all'id del tab
- String tabId = (String) request.getAttribute(Costanti.PARAMETER_TAB_KEY);
-
- String prevTabId = request.getParameter(Costanti.PARAMETER_PREV_TAB_KEY);
-
- Map<String,Map<String, Object>> sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
-
- if(sessionMap == null) {
- sessionMap = new ConcurrentHashMap<String, Map<String,Object>>();
- }
-
- Map<String, Object> mapTabId = null;
- if(sessionMap.containsKey(tabId)) {
- mapTabId = sessionMap.get(tabId);
-
- } else {
- // primo accesso copio le informazioni dalla mappa relativa al tab precedente
- copiaAttributiSessioneTab(session, prevTabId, tabId);
- sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
- mapTabId = sessionMap.get(tabId);
- }
-
- if(mapTabId.containsKey(objectName))
- return mapTabId.get(objectName);
-
- // leggi dall request
- // if(request != null) {
- // String parameterValue = request.getParameter(objectName);
- //
- // if(parameterValue != null) {
- // return objectClass.cast(parameterValue);
- // }
- // }
- }
-
- // comportamento normale
- Object obj = session.getAttribute(objectName);
- return obj;
- }
-
- public static String getStringAttributeFromSession(String attributeName, HttpSession session, HttpServletRequest request) {
- return getObjectFromSession(request, session, String.class, attributeName);
- }
-
- public static Integer getIntegerAttributeFromSession(String attributeName, HttpSession session, HttpServletRequest request) {
- return getObjectFromSession(request, session, Integer.class, attributeName);
- }
-
- @SuppressWarnings("unchecked")
- public static void copiaAttributiSessioneTab(HttpSession session, String idSessioneTabSrc, String idSessioneTabDest) {
- Map<String,Map<String, Object>> sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
-
- if(sessionMap == null) {
- sessionMap = new ConcurrentHashMap<String, Map<String,Object>>();
- }
-
- Map<String, Object> mapDest = null;
- if(StringUtils.isNotBlank(idSessioneTabSrc) && sessionMap.containsKey(idSessioneTabSrc)) { // identificativo del tab sorgente definito
- // cerco una sessione da cui copiare altrimenti creo una sessione vuota
- Map<String, Object> mapSrc = sessionMap.get(idSessioneTabSrc);
- mapDest = (HashMap<String, Object>) SerializationUtils.clone(((HashMap<String, Object>)mapSrc));
- } else { // se non ricevo un id tab provo a cercare l'ultima sessione creata altrimenti creo una sessione vuota
- Date date = new Date(0l); // imposto una data molto vecchia
- String idSessionTab = null;
-
- List<String> keys = new ArrayList<>();
- for (String mapTabKey : sessionMap.keySet()) {
- keys.add(mapTabKey);
- }
-
- for (String idSessioneTmp : keys) {
- Map<String, Object> mapTmp = sessionMap.get(idSessioneTmp);
- Date dTmp = (Date) mapTmp.get(Costanti.SESSION_ATTRIBUTE_TAB_MAP_CREATION_DATE);
-
- if(dTmp.after(date)) { // il tab analizzato e' stato creato dopo
- date = dTmp; // salvo la data
- idSessionTab = idSessioneTmp; // salvo l'id del tab
- }
- }
-
- if(idSessionTab != null) {
- Map<String, Object> mapSrc = sessionMap.get(idSessionTab);
- // in questo ramo devo riconoscere se ho cliccato su un tab dopo che e' scaduta la sessione, ma e' stato fatto login in un tab diverso
- // in questo caso mi arrivano entrambi gli id ma non e' stato trovato una mappa sorgente nella lista delle mappe salvate
- // gli id possono essere uguali = clic sullo stesso tab
- // gli id possono non coincidere = apertura di un nuovo tab da un tab scaduto
- if(idSessioneTabSrc != null && idSessioneTabDest != null) {
- mapDest = new HashMap<>(); // nuova mappa dopo click su tab dove non e' stata rinnovata la sessione
- // vengono riportati gli attributi relativi all'utenza collegata
- if(mapSrc.containsKey(Costanti.SESSION_ATTRIBUTE_USER)) {
- mapDest.put(Costanti.SESSION_ATTRIBUTE_USER, mapSrc.get(Costanti.SESSION_ATTRIBUTE_USER));
- }
- // page data
- if(mapSrc.containsKey(Costanti.SESSION_ATTRIBUTE_PAGE_DATA)) {
- mapDest.put(Costanti.SESSION_ATTRIBUTE_PAGE_DATA, mapSrc.get(Costanti.SESSION_ATTRIBUTE_PAGE_DATA));
- }
- // general data
- if(mapSrc.containsKey(Costanti.SESSION_ATTRIBUTE_GENERAL_DATA)) {
- mapDest.put(Costanti.SESSION_ATTRIBUTE_GENERAL_DATA, mapSrc.get(Costanti.SESSION_ATTRIBUTE_GENERAL_DATA));
- }
-
- // attributo che indica l'id del tab con la sessione su cui fare refresh
- mapDest.put(Costanti.SESSION_ATTRIBUTE_TAB_MAP_REFRESH_TAB_ID, idSessioneTabDest);
- } else {
- mapDest = (HashMap<String, Object>) SerializationUtils.clone(((HashMap<String, Object>)mapSrc)); // mappa clonata dalla piu' vecchia sessione creata
- }
- } else {
- mapDest = new HashMap<>(); // nuova mappa dopo login.
- mapDest.put(Costanti.SESSION_ATTRIBUTE_TAB_MAP_CREATION_TAB_ID, idSessioneTabDest); // salvo l'identificativo del tab che ha creato la sessione
- }
- }
-
- //salvo la data di creazione del tab
- mapDest.put(Costanti.SESSION_ATTRIBUTE_TAB_MAP_CREATION_DATE, new Date());
- // creo il primo token CSFR per il tab
- mapDest.put(Costanti.SESSION_ATTRIBUTE_CSRF_TOKEN, generaTokenCSRF(idSessioneTabDest));
-
- sessionMap.put(idSessioneTabDest, mapDest);
-
- session.setAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP, sessionMap);
- }
-
- public static <T> T removeObjectFromSession(HttpServletRequest request, HttpSession session,Class<T> objectClass, String objectName){
- return removeObjectFromSession(request, session, objectClass, objectName, true);
- }
- @SuppressWarnings("unchecked")
- private static <T> T removeObjectFromSession(HttpServletRequest request, HttpSession session,Class<T> objectClass, String objectName, boolean returnValue){
- if(objectName.startsWith(Costanti.SESSION_ATTRIBUTE_TAB_KEY_PREFIX)) {
-
- // lettura dalla sessione associata all'id del tab
- String tabId = (String) request.getAttribute(Costanti.PARAMETER_TAB_KEY);
-
- Map<String,Map<String, Object>> sessionMap = (Map<String,Map<String, Object>>) session.getAttribute(Costanti.SESSION_ATTRIBUTE_TAB_KEYS_MAP);
-
- if(sessionMap == null) {
- sessionMap = new ConcurrentHashMap<String, Map<String,Object>>();
- }
-
- List<String> keys = new ArrayList<>();
- for (String mapTabKey : sessionMap.keySet()) {
- keys.add(mapTabKey);
- }
-
- Object obj = null;
- // la remove deve essere fatta da tutti i tab session
- for (String mapTabKey : keys) {
- Map<String, Object> mapTabId = sessionMap.get(mapTabKey);
- // se il tab e' quello corrente allora restituisco anche l'oggetto
- if(tabId.equals(mapTabKey)) {
- obj = mapTabId.remove(objectName);
- } else {
- mapTabId.remove(objectName);
- }
- }
-
- if(obj != null && returnValue) {
- return objectClass.cast(obj);
- }
- }
-
- // comportamento normale
- Object obj = session.getAttribute(objectName);
- if(obj != null) {
-
- session.removeAttribute(objectName);
-
- if(returnValue) {
- return objectClass.cast(obj);
- }
- }
- return null;
- }
- public static String getParametersAsString(boolean createFirstParameter, Parameter ... parameter ) {
- StringBuilder sb = new StringBuilder();
- if(parameter!=null && parameter.length>0){
- if(createFirstParameter)
- sb.append("?");
- else
- sb.append("&");
- for (int i = 0; i < parameter.length; i++) {
- if(i>0){
- sb.append("&");
- }
- sb.append(parameter[i].toString());
- }
- }
- return sb.toString();
- }
- public static void removeCookieFromResponse(String cookieName, HttpServletRequest request, HttpServletResponse response){
- Cookie[] cookies = request.getCookies();
- if(cookies != null){
- for(int i = 0; i< cookies.length ; ++i){
-
- if(cookies[i].getName().equalsIgnoreCase(cookieName)){
- // Cookie cookie = new Cookie(cookies[i].getName(), cookies[i].getValue());
- // cookie.setMaxAge(0);
- // response.addCookie(cookie);
- String contextPath = request.getContextPath();
- cookies[i].setPath(contextPath);
- cookies[i].setMaxAge(0);
- cookies[i].setValue("NO_DATA");
- cookies[i].setVersion(0);
- response.addCookie(cookies[i]);
- break;
- }
- }
- }
- }
-
- public static void saveConfigurazioneBeanIntoSession(HttpServletRequest request, HttpSession session,ConfigBean configurazioneBean, String objectName){
- setObjectIntoSession(request, session, configurazioneBean, Costanti.SESSION_PARAMETRO_OLD_CONFIGURAZIONE_PROPERTIES_PREFIX + objectName);
- }
-
- public static void removeConfigurazioneBeanFromSession(HttpServletRequest request, HttpSession session,String objectName){
- removeObjectFromSession(request, session, Costanti.SESSION_PARAMETRO_OLD_CONFIGURAZIONE_PROPERTIES_PREFIX + objectName);
- }
- public static ConfigBean readConfigurazioneBeanFromSession(HttpServletRequest request, HttpSession session, String objectName){
- return getObjectFromSession(request, session, ConfigBean.class, Costanti.SESSION_PARAMETRO_OLD_CONFIGURAZIONE_PROPERTIES_PREFIX + objectName);
- }
-
-
-
-
- /* ------ IN USO ---- */
-
- public static void addInUsoButton(String servletName, List<DataElement> e, DataElementType deType, String titolo, String id, String inUsoType,
- String tooltip, String icon, String headerRiga1,
- Boolean resizable, Boolean draggable, boolean contextMenu) {
- DataElement de = new DataElement();
- de.setType(deType);
- de.setToolTip(tooltip);
- de.setWidthPx(15);
- de.setContextMenu(contextMenu);
- Dialog deDialog = new Dialog();
- deDialog.setIcona(icon);
- deDialog.setTitolo(titolo);
- deDialog.setHeaderRiga1(headerRiga1);
- if(resizable!=null) {
- deDialog.setResizable(resizable);
- }
- if(draggable!=null) {
- deDialog.setDraggable(draggable);
- }
- deDialog.setWidth("800px"); // modifico il default, che è più piccolo e calibrato per la creazione delle credenziali
-
- // Inserire sempre la url utilizzando la funzione setUrlElement
- BodyElement bodyElementURL = new Dialog().new BodyElement();
- bodyElementURL.setType(DataElementType.HIDDEN);
- bodyElementURL.setName(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_URL);
- Parameter pIdOggetto = new Parameter(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_ID_OGGETTO, id);
- Parameter pTipoOggetto = new Parameter(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_OGGETTO, inUsoType);
- Parameter pTipoRisposta = new Parameter(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_RISPOSTA, Costanti.VALUE_PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_RISPOSTA_TEXT);
- bodyElementURL.setUrl(servletName, pIdOggetto,pTipoOggetto,pTipoRisposta);
- deDialog.setUrlElement(bodyElementURL);
-
- // TextArea
- BodyElement bodyElement = new Dialog().new BodyElement();
- bodyElement.setType(DataElementType.TEXT_AREA);
- bodyElement.setLabel("");
- bodyElement.setValue("");
- bodyElement.setRows(15);
- if(resizable!=null) {
- bodyElement.setResizable(resizable);
- }
- deDialog.addBodyElement(bodyElement );
-
- de.setDialog(deDialog );
- e.add(de);
- }
-
- public static void addAjaxButton(List<DataElement> e, DataElementType deType, String icon, String tooltip, String titolo, String body, boolean contextMenu, String servletName, List<Parameter> parameters, String inUsoType) {
- DataElement de = new DataElement();
- de.setType(deType);
- de.setIcon(icon);
- de.setToolTip(tooltip);
- de.setWidthPx(15);
- de.setContextMenu(contextMenu);
- if(parameters == null) {
- parameters = new ArrayList<>();
- }
- parameters.add(new Parameter(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_OGGETTO, inUsoType));
- parameters.add(new Parameter(Costanti.PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_RISPOSTA, Costanti.VALUE_PARAMETRO_INFORMAZIONI_UTILIZZO_OGGETTO_TIPO_RISPOSTA_TEXT));
-
- de.setUrl(servletName, parameters.toArray(new Parameter[parameters.size()]));
-
- DataElementConfirm confirm = new DataElementConfirm();
- confirm.setTitolo(titolo);
- confirm.setBody(body);
- de.setConfirm(confirm );
-
- e.add(de);
- }
-
- public static void generaESalvaTokenCSRF(HttpServletRequest request, HttpSession session) {
- // String tabId = (String) request.getAttribute(Costanti.PARAMETER_TAB_KEY);
- String uuId = UUID.randomUUID().toString().replace("-", "");
- String nuovoToken = generaTokenCSRF(uuId);
- setObjectIntoSession(request, session, nuovoToken, Costanti.SESSION_ATTRIBUTE_CSRF_TOKEN);
- }
- public static String generaTokenCSRF(String sessionTabID) {
- String nuovoToken = sessionTabID + "_" + System.currentTimeMillis();
- return nuovoToken;
- }
-
- public static String leggiTokenCSRF(HttpServletRequest request, HttpSession session) {
- return getObjectFromSession(request, session, String.class, Costanti.SESSION_ATTRIBUTE_CSRF_TOKEN);
- }
-
- public static boolean verificaTokenCSRF(String tokenToCheck, HttpServletRequest request, HttpSession session, Integer validitaTokenCsrf) {
- String csfrTokenFromSession = ServletUtils.leggiTokenCSRF(request, session);
- return verificaTokenCSRF(tokenToCheck, csfrTokenFromSession, validitaTokenCsrf);
- }
-
- public static boolean verificaTokenCSRF(String tokenToCheck, String csfrTokenFromSession, Integer validitaTokenCsrf) {
- // non ho trovato il token nella request non passo il controllo
- if(tokenToCheck == null) return false;
-
- // controllo che il token coincida per intero con quello salvato in sessione
- if(!tokenToCheck.equals(csfrTokenFromSession)) return false;
-
- // Controllo scadenza del token in base alla soglia impostata nelle properties
- if(validitaTokenCsrf != null) {
- String[] split = tokenToCheck.split("_");
- String millisSToCheck = split[1];
-
- long sogliaMS = validitaTokenCsrf.longValue() * 1000;
- long now = System.currentTimeMillis() ;
- long rif = sogliaMS + Long.parseLong(millisSToCheck);
-
- return now < rif;
- }
-
- return true;
- }
-
- public static String getJsonPair(String key, String val) {
- StringBuilder sb = new StringBuilder();
- sb.append(Costanti.CHAR_QUOTA_JSON).append(key).append(Costanti.CHAR_QUOTA_JSON).append(Costanti.CHAR_DUE_PUNTI_JSON);
- if(val != null) {
- sb.append(Costanti.CHAR_QUOTA_JSON).append(val).append(Costanti.CHAR_QUOTA_JSON);
- } else {
- sb.append(Costanti.NULL_VALUE_JSON);
- }
- return sb.toString();
- }
-
- public static String getJson(String ... pairs) {
- StringBuilder sb = new StringBuilder();
- sb.append(Costanti.CHAR_APERTURA_JSON);
-
- if(pairs != null) {
- for (int i = 0; i < pairs.length; i++) {
- if(i > 0) {
- sb.append(Costanti.CHAR_VIRGOLA_JSON);
- }
- sb.append(pairs[i]);
- }
- }
-
- sb.append(Costanti.CHAR_CHIUSURA_JSON);
- return sb.toString();
- }
-
- public static void setErrorStatusCodeInRequestAttribute(HttpServletRequest request, HttpStatus httpStatus){
- request.setAttribute(Costanti.REQUEST_ATTRIBUTE_SET_ERROR_CODE, httpStatus);
- }
- }