2009-05-27 9 views
1

J'ai une action DWR avec une signature de méthode comme suit:Accès aux données post DWR dans un printemps Interceptor

String joinGroup(String groupId, String groupName); 

Ceci est appelé via une requête AJAX DWR et fonctionne très bien.

Cependant, j'essaye d'écrire un intercepteur de ressort (fonctionne un peu comme un ServletFilter) pour faire un certain travail d'authentification avant que l'action de DWR soit appelée.
L'intercepteur est appelé correctement mais j'ai besoin d'accéder aux données groupId et groupName dans l'intercepteur. La carte des paramètres de la demande est vide et j'ai parcouru toute la liste des attributs de la requête dans un débogueur et je ne peux voir les données nulle part.
La requête postData est également nulle. En utilisant firebug, je peux voir que les données sont passées au serveur (et c'est là quand la méthode joinGroup est finalement appelée).
Je ne peux pas sembler y accéder dans mon intercepteur.

Y a-t-il un moyen d'y accéder?

Répondre

2

utilisation org.directwebremoting.AjaxFilter

Le procédé doFilter du AjaxFilter est appelé par DWR chaque fois qu'une demande est faite Ajax sur un procédé que ce filtre est configuré contre. AjaxFilterChain transmis à cette méthode permet au filtre de transmettre les détails de la méthode à l'entité suivante dans la chaîne.

En général, la méthode serait faire ce qui suit:

  1. Examiner la demande
  2. modifier éventuellement la méthode, l'objet ou les paramètres
  3. Soit invoquez l'entité suivante dans la chaîne en utilisant le AjaxFilterChain ou décide de une autre action à la place.
  4. modifier En option, la valeur retournée à l'utilisateur
  5. Prenez une autre action (par exemple l'exploitation forestière)
+0

Ce fut la solution que j'ai trouvé après avoir posté la question, merci. –

1

Je suppose que vous utilisez un MethodInterceptor qui est appelé (ce qui signifie que votre configuration est correcte) uniquement sur la méthode ci-dessus.

... 
@Override 
public Object invoke(MethodInvocation inv) throws Thorwable { 
    Object[] args = inv.getArguments(); 
    String groupId = args[0]; 
    String groupName = args[1]; 
    .... if user has access call inv.proceed, else throw AccessDeniedException 
} 

MethodInterceptor dans le cadre de printemps est à peu près exactement le même que MethodSecurityInterceptor au printemps sécurité.

+0

Hiya, je ne suis pas en utilisant Acegi J'ai peur. J'ai de toute façon trouvé une solution alternative que je publierai sous peu. –

+0

Ah, quand j'ai vu le mot "authentification" je me suis dit que vous utilisiez Spring Security ou Acegi. – Gandalf

+0

Même idée ... il suffit d'utiliser Spring AOP pour intégrer la méthode appel –