2016-04-13 7 views
3

Ich möchte Benutzereingaben verschlüsseln und in einer Datenbank speichern. Ich bin mit Struts 2 Typumwandlung, die alle Benutzereingaben als String behandelt und Umwandlungen wie die folgenden Arbeit richtig:String zu String Typ Konvertierung in Struts 2 funktioniert nicht?

  • String zu Integer
  • String zu Long
  • String zu byte[]

Aber wenn ich eine Konvertierung auf den Zieltyp versuchen: String, funktioniert es nicht und die convertFromString() Methode wird nicht aufgerufen.

@Override 
public Object convertFromString(Map context, String[] value, Class arg2) { 
    String val = value[0];  

    try { 
     return ASEEncDecUtil.encrypt(val.getBytes("UTF-8")); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
     return null; 
    } 

} 

Ich bin nicht in der Lage, herauszufinden, was mache ich falsch.

Gibt es eine Best Practice, die zum Verschlüsseln von Benutzereingaben verwendet werden sollte?

+0

Mit * Benutzereingabe * meinst du ein * Passwort * oder * Inhalt * (zB ein Text)? –

+0

Es ist Textinhalt mit einigen vertraulichen Informationen, die wir verschlüsseln möchten. – dpilwal

Antwort

2

Die Aufgabe eines Konverters ist es, eine Konvertierung zwischen verschiedenen Formaten durchzuführen.

Es ist nicht das richtige Werkzeug, um ein Objekt in einem Format zu erhalten, führen Sie ein Geschäft darauf und dann im gleichen Format zurück.

Für diese Art von Dingen können Sie mehrere Mechanismen (orthogonal wie Struts2 Interceptors und Java EE Decorators oder spezifische wie Action Methods oder sogar Mutators/Accessors) verwenden, je nach Faktoren wie die Anzahl der Zeiten/Orte, an denen Sie sie benutzen müssen.

Der einfachste Weg (Ich bin ein Fan KISS Paradigma) ist die Accessoren/Mutatoren Weg:

public class KeepItSimpleStupidAction extends ActionSupport { 

    @Inject Logger LOG; 

    private String text; // text is always encrypted inside the action 

    public String getText() { // but it can also be read decrypted by calling the getter 
     return ASEEncDecUtil.decrypt(text.getBytes("UTF-8")); 
    } 

    public void setText(String text) { // the setter automatically encrypts it 
     this.text = ASEEncDecUtil.encrypt(text.getBytes("UTF-8")); 
    } 

    public String execute() { 
     LOG.debug("text decrypted: " + getText()); 
     LOG.debug("text encrypted: " + text); 
     return SUCCESS; 
    } 

} 
4

Sie sind höchstwahrscheinlich StrutsTypeConverter Klasse in Ihrem benutzerdefinierten Konverter erstreckt. So

public Object convertValue(Map context, Object o, Class toClass) { 
    if (toClass.equals(String.class)) { 
     return convertToString(context, o); 
    } else if (o instanceof String[]) { 
     return convertFromString(context, (String[]) o, toClass); 
    } else if (o instanceof String) { 
     return convertFromString(context, new String[]{(String) o}, toClass); 
    } else { 
     return performFallbackConversion(context, o, toClass); 
    } 
} 

wenn toClass ist String Klasse dann convertFromString nie genannt: In ihm die convertFromString und convertToString Methoden werden von der convertValue Methode aufgerufen, die so ähnlich aussieht.

Um das zu erreichen, was Sie wollen, erweitern Sie stattdessen com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter und überschreiben Sie public Object convertValue(Map context, Object o, Class toClass) Methode.

+2

danke für die Erklärung, warum Methode ConvertFromString() nicht aufgerufen wird. – dpilwal

Verwandte Themen