2009-05-16 9 views
1

Gibt es eine Möglichkeit Beratung mit einem Parameter eines bestimmten Typs auf jeder Methode zu setzen. Ich plane, dies für eine Klasse zu verwenden, die Eingabefilterung benötigt.Platzierung Beratung zu jedem Parameter eines bestimmten Typs in AspectJ

Als Beispiel:

@Filtered 
class Unsafe { 
    public void doStuff (String input) { ... } 

    public void doMoreStuff (String input, int value, String name) { ... } 
} 

ich Beratung schreiben möchten, die in dieser Klasse zu jedem String-Parameter der Methoden gilt, so dass ich ihren Inhalt mit einem Safe, entkam, Version ersetzen kann (verhindern zB SQL-Injektion).

Ist es möglich, ein solches pointcut zu schreiben?

Antwort

0

Da Sie mehr als eine Zeichenfolge, an verschiedenen Orten haben, sehe ich nicht, wie Sie es tun können, aber sollten beide Klassen die gleiche Methode aufrufen, die in die Datenbank geschrieben werden. An diesem Punkt können Sie eine Umrandung verwenden, um die Zeichenkette zu ändern und sie stattdessen zu übergeben.

+0

Ja, ich habe es auf der Datenbank-Ebene tun könnte, aber das noch hindert mich nicht an Cross-Side-Scripting-Injection. Deshalb wollte ich das an der Fassade machen, die zuerst Eingaben aus dem Web akzeptiert. Trickreich. –

+0

Warum eine Anmerkung nicht durch jede Methode setzen, die ungefiltert ist, wie @Unfiltered, und dann können Sie einen Aspekt für die Anmerkung schreiben, aber man kann immer noch wissen müssen, welche Zielparameter zu. –

0

Meiner Meinung nach, müssen Sie noch wissen, ob es ein Muster für alle Methoden, die in einem SQL-stirng nehmen.

Und dann können Sie die Argumente der Methode in Ihrem Rat überprüfen:

Object around() : PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING { 
    Signature sig = thisJoinPointStaticPart.getSignature(); 
    Object[] args = thisJoinPoint.getArgs(); 
    //Check the type of each object in the args, and re-format String type object 

    return proceed();// Continue with the current joint-point method 
} 

ersetzen PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING mit tatsächlichen Mustern

Verwandte Themen