2016-04-13 24 views
3

Kullanıcı girişini şifrelemek ve bir veritabanında saklamak istiyorum.Dize için Dize Türü Dönüştürme Struts 2'de çalışmıyor mu?

  • StringInteger
  • String için Long
  • String için byte[]
için: Struts 2 türü dönüştürme kullanıyorum, her kullanıcı girişi bu doğru aşağıdaki çalışma gibi bir String ve dönüşüm olarak işlenir

Ama hedef türüne bir dönüşüm girişiminde bulunduğum zaman: String, işe yaramıyor ve convertFromString() yöntemi çağrılmıyor.

@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; 
    } 

} 

Neyi yanlış yaptığımı anlayamıyorum.

Kullanıcı girişini şifrelemek için kullanılması gereken en iyi uygulama var mı?

+0

* kullanıcı girişi * ile bir * şifre * veya * içerik * (örneğin bir metin) kastedilmektedir? –

+0

Bu, şifrelemek istediğimiz bazı hassas bilgilere sahip metin içeriğidir. – dpilwal

cevap

2

Dönüştürücünün işi, farklı biçimler arasında bir dönüştürme gerçekleştirmektir.

O değil aynı biçimde iade ardından, üzerinde iş yapar ve bir formatta bir eşya taşımak doğru araçtır.

Bu tür şeyler için, birçok mekanizma (Struts2 Interceptors ve Java EE Decorator gibi ortogonal veya özel benzeri Eylem Yöntemleri veya Mutators/Accessors gibi) kullanabilirsiniz, her biri daha bunları kullanmanız gereken zamanlar/yerler.

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

Büyük olasılıkla özel dönüştürücü içinde StrutsTypeConverter sınıfını geliştiriyoruz:

kolay yolu (Ben KISS paradigma hayranıyım) Erişimciler/mutators yoludur. İçinde convertFromString ve convertToString yöntemleri böyle bir şey görünüyor convertValue yönteminden denir:

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); 
    } 
} 

Yani toClass sonra convertFromString asla denir String sınıf ise.

İstediğinizi elde etmek için com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter uzatın ve public Object convertValue(Map context, Object o, Class toClass) yöntemini geçersiz kılın.

+2

method convertFromString() yönteminin neden çağrılmadığını açıkladığınız için teşekkür ederiz. – dpilwal