Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用db spring 3.1安全性实现每个用户登录/注销的定制SHA-256 salt?_Java_Spring_Authentication_Salt - Fatal编程技术网

Java 如何使用db spring 3.1安全性实现每个用户登录/注销的定制SHA-256 salt?

Java 如何使用db spring 3.1安全性实现每个用户登录/注销的定制SHA-256 salt?,java,spring,authentication,salt,Java,Spring,Authentication,Salt,我正在广泛阅读这份文件,但我找不到所有问题的答案 在SpringWeb应用程序中,基于表单登录(user+pwd),我想使用SHA-256对用户密码进行加密,对每个用户使用随机加密。这意味着我必须在数据库中为每个用户保存salt和哈希密码。目前没有问题 显然,我必须实现自己的UserDetailsService,从数据库中获取用户信息,并在spring security.xml中进行配置 似乎我必须在UserDetails的实现之上添加一个额外的getSalt()方法,以便在根据存储的哈希密码检

我正在广泛阅读这份文件,但我找不到所有问题的答案

在SpringWeb应用程序中,基于表单登录(user+pwd),我想使用SHA-256对用户密码进行加密,对每个用户使用随机加密。这意味着我必须在数据库中为每个用户保存salt和哈希密码。目前没有问题

  • 显然,我必须实现自己的
    UserDetailsService
    ,从数据库中获取用户信息,并在
    spring security.xml
    中进行配置

  • 似乎我必须在
    UserDetails
    的实现之上添加一个额外的
    getSalt()
    方法,以便在根据存储的哈希密码检查用户提供的登录时可用

  • 然后情况就变得不清楚了。我应该拦截登录请求。从第6.4.3节来看,Spring似乎会将用户提交的凭据映射到
    身份验证
    对象,并将其提交到
    身份验证管理器

    我的问题是:

    i) Spring将向
    AuthenticationManager
    提交什么
    身份验证实现?如何检索名称和密码

    ii)似乎我必须实现自己的
    AuthenticationManager
    。每次调用
    authenticate(…)
    ,我都会从数据库中获取登录名和密码,获取
    UserDetails
    。然后,用相应的salt散列提供的pwd,并与数据库散列项进行比较。对吗

    iii)
    AuthenticationManager
    API还有一个
    支持(…)
    方法。应该如何实施


    iv)应该如何配置
    身份验证
    身份验证管理器

    我一定没有正确阅读您的问题,但是Spring Security提供了现成的安全密码:


    如果8位salt不足,您可以将自己的SaltSource注入到DaoAuthenticationProvider中。该手册实际上强烈建议这样做。

    只是出于好奇,您选择使用用户密码是否有特殊的原因/要求?@Andre确保如果有人破坏数据库,他们将无法访问源密码。这就是我的想法。我只是想知道你是否需要储存盐。我曾多次遇到BCrypt,并最终将其与Spring Security一起使用;它很好用。看看这个帖子:我想我在文档中做得不够深入。谢谢