让我们从第二个问题开始,因为它更相关:
第二个问题“为什么要通过网络传输密码......”答案:
因为你描述的只是Simple Hash-Based Token Approach
如果向下滚动页面Spring Security Reference: Chapter 10 Remember-Me Authentication你会看到 spring security 也可以使用不同的 remember me 方法:Chapter 10.3 Persistent Token Approach。这就是您在第二个问题中提出的建议。
第一个问题:简短回答“对于这么小的信息,这些对性能的影响会很大吗?” - 不
因此,如果您想使用Simple Hash-Based Token Approach
MD5 并且觉得 MD5 是不安全的,那么您可以继承TokenBasedRememberMeService
[javadoc]并覆盖该String makeTokenSignature(long tokenExpiryTime, String username, String password)
方法。例如(未经测试)
protected String makeTokenSignature(long tokenExpiryTime, String username, String password) {
String data = username + ":" + tokenExpiryTime + ":" + password + ":" + getKey();
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("No SHA-256 algorithm available!");
}
return new String(Hex.encode(digest.digest(data.getBytes())));
}