【问题标题】:JSF : How to change value of jsf input before sending request (to encrypt password)JSF:如何在发送请求之前更改 jsf 输入的值(加密密码)
【发布时间】:2014-07-21 16:48:57
【问题描述】:

我正在尝试实现 FriendlyCryptoNeighbor here 的非常好的答案,而且我对所有 jsf 的东西都很陌生。

为了加密客户端的密码(如RSA_With_Public_Key(SHA256(password))),我想覆盖<h:input 以在javascript中调用加密函数。但我无法设法做到这一点。

问题是我有一个绑定到输入值的 bean ...在 RESTful 服务器中,它很容易加密并从 javascript 发出请求,但是我不确定这一切是如何工作的。

-- 更新 1

目前,我在单击 commandButton 时执行一个 javascript 脚本,该脚本会更新绑定我的 bean 的隐藏字段。

【问题讨论】:

  • 为什么要在客户端创建sha?为什么不在 jsf bean 中?
  • 因为它不是加密存储在数据库中的。我想向客户证明我无法读取他的密码。我在下面的帖子中提到了一些原因,比如通过 http 会话和 cookie 进行嗅探和其他东西。再次感谢您的回答;)

标签: javascript jakarta-ee encryption jsf-2 input


【解决方案1】:

我不确定您为什么要在客户端而不是 bean 本身中执行此操作..

但是在 jsf 中你可以使用 Converter 来转换你的输入。看看这个例子。

这很容易做到

http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/

我把重要的东西拿来了..

首先是页面..

<h:inputText id="bookmarkURL" value="#{user.bookmarkURL}" 
        size="20" required="true" label="Bookmark URL">
        <f:converter converterId="com.mkyong.URLConverter" />
    </h:inputText>

你需要构建转换器

@FacesConverter("com.mkyong.URLConverter")
public class URLConverter implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component,
    String value) {

    String HTTP = "http://";
    StringBuilder url = new StringBuilder();

    //if not start with http://, then add it
    if(!value.startsWith(HTTP, 0)){
        url.append(HTTP);
    }
    url.append(value);

    //use Apache common URL validator to validate URL
    UrlValidator urlValidator = new UrlValidator();
    //if URL is invalid
    if(!urlValidator.isValid(url.toString())){

        FacesMessage msg = 
            new FacesMessage("URL Conversion error.", 
                    "Invalid URL format.");
        msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        throw new ConverterException(msg);
    }

    URLBookmark urlBookmark = new URLBookmark(url.toString());

    return urlBookmark;
}

@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {

    return value.toString();

}   

}

希望对您有所帮助..

【讨论】:

  • 非常感谢,我想在客户端更改它,因为我不想使用 SSL,也不想以纯文本形式发送它。这是我正在寻找的确切答案。
  • 为什么不想使用 SSL?
  • 因为 SSL 证书不是免费的,因为我想确切地知道我在做什么,并且在我想要一个比简单的 https 和因为这是一个学校项目,我希望它具有教育意义。
  • 问题是..如果您在客户端创建哈希函数,它可以很容易地反转..您也可以使用这个东西来加密..看看这个:jcryption.org 祝你好运:)
  • 感谢您的链接,我想我会看看 javascript 代码。但我只是想自己做,当然,这不是一个简单的哈希。它基于 RSA、SHA256 和共享盐。
猜你喜欢
  • 1970-01-01
  • 2017-10-05
  • 2015-12-03
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多