对于密码值,字符串易受攻击。我注意到 Vaadin PasswordField
将 password 作为 String
进行操作。
以下是 PasswordField
的默认构造函数,
public PasswordField() {
setValue("");
}
我的问题:
- 使用安全吗
PasswordField
在 Vaadin ? - 什么内部 API 可以确保密码的安全?
最佳答案
TL;DR 瓦丁 PasswordField
是一个简单的 TextField
.输入仅在客户端隐藏,在服务器端以明文形式传输。
尽管您可以使用 getConvertedValue()
和 setConvertedValue(Object value)
用于获取/设置您自己类型的值。请注意,您必须设置 setConverter(Converter<T,?> converter)
在使用之前。
这里有一个如何正确使用对话的例子:Creating your own converter for String - MyType conversion
完整解释
Vaadin TextField
, PasswordField
和 TextArea
都是 AbstractField<String>
的 child .
详细说明:
java.lang.Object
|_ com.vaadin.server.AbstractClientConnector
|_ com.vaadin.ui.AbstractComponent
|_ com.vaadin.ui.AbstractField<java.lang.String>
|_ com.vaadin.ui.AbstractTextField
PasswordField
与 String
一起工作因为它的 parent ,否则它应该实现AbstractField<char[]>
.
另外在 PasswordField
section from Vaadin Docs明确地说:
You should note that the
PasswordField
hides the input only from "over the shoulder" visual observation. Unless the server connection is encrypted with a secure connection, such as HTTPS, the input is transmitted in clear text and may be intercepted by anyone with low-level access to the network. Also phishing attacks that intercept the input in the browser may be possible by exploiting JavaScript execution security holes in the browser.
尽管 AbstractField<T>
有 getConvertedValue()
和 setConvertedValue(Object value)
这允许获取/设置 Object
中的值你比较喜欢。请注意,在使用它之前,您需要设置 setConverter(Converter<T,?> converter)
.
这里有一个如何正确使用对话的例子:Creating your own converter for String - MyType conversion
举个例子:
Name
是一个简单的 POJO与 firstName
和 lastName
字段及其 getter/setter。
转换器类
public class StringToNameConverter implements Converter<String, Name> {
public Name convertToModel(String text, Locale locale) {
String[] parts = text.split(" ");
return new Name(parts[0], parts[1]);
}
public String convertToPresentation(Name name, Locale locale)
throws ConversionException {
return name.getFirstName() + " " + name.getLastName();
}
public Class<Name> getModelType() {
return Name.class;
}
public Class<String> getPresentationType() {
return String.class;
}
}
主类
Name name = new Name("Rudolph", "Reindeer");
final TextField textField = new TextField("Name");
textField.setConverter(new StringToNameConverter());
textField.setConvertedValue(name);
addComponent(textField);
addComponent(new Button("Submit value", new ClickListener() {
public void buttonClick(ClickEvent event) {
Name name = (Name) textField.getConvertedValue();
}
}));
完整来源
-
com.vaadin.ui.PasswordField
-
com.vaadin.ui.TextField
-
com.vaadin.ui.TextArea
-
com.vaadin.ui.AbstractField<T>
-
com.vaadin.ui.AbstractField<T>#getConvertedValue()
-
com.vaadin.ui.AbstractField<T>#setConvertedValue(Object value)
-
com.vaadin.ui.AbstractField<T>#setConverter(Converter<T,?> converter)
- Vaadin Docs
TextField
- Vaadin Docs
PasswordField
- 示例:Creating your own converter for String - MyType conversion
- Difference between DTO, VO, POJO, JavaBeans?
- Morfic's answer
关于java - 为什么 PasswordField 在 Vaadin 中使用 String 而不是 char[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38888940/