2015-05-06 3 views
1

Кто-нибудь знает, можно ли изменить/удалить значения параметров запроса в перехватчике Struts2?Изменение значения параметра запроса в перехватчике Struts2

Параметр запроса Map является экземпляром UnmodifiableMap, поэтому он не выглядит так, как с ним можно манипулировать в перехватчике.

UPDATE:

Я использую Liferay так uParamsMap будет UnmodifiableMap

public String intercept(ActionInvocation invocation) throws Exception { 
    final ActionContext context = invocation.getInvocationContext(); 
    PortletRequest request = (PortletRequest) context.get(REQUEST); 
    Map<String, String[]> uParamsMap = request.getParameterMap(); 
    return invocation.invoke(); 
} 
+0

Что именно вы хотите сделать с параметрами? Вы можете исключить их. –

+0

У меня есть перехватчик для проверки ввода и вы хотите изменить подозрительные. Я не хочу их полностью удалять, потому что некоторые из них могут быть законными – steven35

+0

Забыл упомянуть, что я использую Liferay – steven35

ответ

4

Может быть, вы можете попробовать, как это.

public String intercept(ActionInvocation invocation) throws Exception { 
    final ActionContext context = invocation.getInvocationContext(); 
    Map<String,Object> parameters = (Map<String,Object>)context.get(ActionContext.PARAMETERS); 

    Map<String, Object> parametersCopy = new HashMap<String, Object>(); 
    parametersCopy.putAll(parameters); 
    parametersCopy.put("myParam", "changedValue"); 

    context.put(ActionContext.PARAMETERS, parametersCopy); 

    return invocation.invoke(); 
} 
+0

Да, я действительно решил это решить, прежде чем увидел, что ты ответишь, поэтому я приму это – steven35

0

У меня была аналогичная проблема в моем коде, но решение выше не работало для меня.

Если вы хотите внести изменения в любые параметры в перехватчик, прежде чем они попадут в использовании класса действие этот код:

@Override 
public String intercept(ActionInvocation ai) throws Exception { 

    ValueStack stack=ai.getStack(); 
    Iterator it = stack.getRoot().iterator(); 
    while(it.hasNext()) 
    { 
     Object objecto = it.next(); 
     //LoginUsuario is my action class 
     if(objecto instanceof LoginUsuario) 
     { 
      LoginUsuario usuario = (LoginUsuario)objecto; 
      usuario.setUsername(usuario.getUsername().toUpperCase()); 
      usuario.setPassword(usuario.getPassword().toUpperCase()); 
     } 
    } 
    return ai.invoke(); 
} 
Смежные вопросы