2016-02-15 7 views
1

Utilise actuellement ce code pour récupérer la valeur du paramètre "csrfPreventionSalt" de Interceptor dans Struts2.Récupère un paramètre spécifique envoyé depuis la vue dans l'intercepteur

Quelqu'un peut-il s'il vous plaît dire une façon directe pour aller chercher sa valeur ...

public String intercept(ActionInvocation invocation) throws Exception { 
    final ActionContext context=invocation.getInvocationContext(); 
    HttpServletRequest httpReq = ServletActionContext.getRequest(); 
    String salt =""; 

    Map<String, Object> params = (Map<String, Object>)ActionContext.getContext().getParameters(); 
    Iterator<Entry<String, Object>> it = (Iterator<Entry<String, Object>>)params.entrySet().iterator(); 
    while(it.hasNext()) { 
     Entry<String, Object> entry = it.next(); 
     if(entry.getKey().equals("csrfPreventionSalt")) 
     { 
     Object obj = entry.getValue(); 
     if (obj instanceof String[]){ 
      String[] strArray = (String[]) obj; 
      if (strArray!=null) { 
       salt = strArray[0]; 
      } 
     } 
    } 
} 
+0

Il s'agit d'une carte et vous connaissez une clé. Pourquoi vous itérez-vous? Jetez un coup d'oeil comment cela est fait dans certains des intercepteurs de noyau S2 par exemple. ['MultiselectInterceptor'] (https://github.com/apache/struts/blob/master/core/src/main/java/org/apache/struts2/interceptor/MultiselectInterceptor.java). –

Répondre

0

On suppose un paramètre a été envoyé à l'action, et non pas à l'intercepteur. Lorsqu'une action est appelée, le contexte d'action est créé et les paramètres de la requête sont copiés dans le contexte de l'action. Vous pouvez obtenir des paramètres via

public String intercept(ActionInvocation invocation) throws Exception { 
    final ActionContext context = invocation.getInvocationContext(); 
    Map<String, Object> parameters = context.getParameters(); 
    String[] values = (String[]) parameters.get("csrfPreventionSalt"); 
    String salt = values[0]; 
    ...