Spring 在PasswordEncoder中获取用户名
我为我的spring应用程序创建了自己的身份验证提供程序,并在其上指定了Spring 在PasswordEncoder中获取用户名,spring,spring-security,Spring,Spring Security,我为我的spring应用程序创建了自己的身份验证提供程序,并在其上指定了org.springframework.security.crypto.password.PasswordEncoder。我将我的用户和他们的加密密码(在数据库算法之后)存储在数据库中。为了能够进行身份验证,我需要从org.springframework.security.crypto.password.PasswordEncoder类访问发送用于身份验证的用户名。谁能指导我怎么做?还是有其他办法 注意:我使用的是Sprin
org.springframework.security.crypto.password.PasswordEncoder
。我将我的用户和他们的加密密码(在数据库算法之后)存储在数据库中。为了能够进行身份验证,我需要从org.springframework.security.crypto.password.PasswordEncoder
类访问发送用于身份验证的用户名。谁能指导我怎么做?还是有其他办法
注意:我使用的是SpringSecurity 3.2。假设用户输入用户名,UserPassword是User,Pwd。 为了进行身份验证,您可以执行以下操作
String encodedPassword=passwordEncoder.encode(pwd)代码>
我甚至不在乎这是不是一个老问题,我只是花了9个小时试图弄明白这一点。最好把它放在这里,以防别人再次发现
String username = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("username");
使用上面的代码,我能够从当前请求中提取用户名
注意:您必须使用以下类org.springframework.web.context.request.RequestContextHolder
有一个类似的错误让我做错了。这是我的问题。如何从my
PasswordEncoder
中输入用户名?密码编码器只是将密码编码到MD5/SHA或任何加密技术,它与用户名无关。如果您的是web应用程序,您可以从请求参数中获取用户名。我理解。但是,有没有办法从PasswordEncoder
访问此请求参数?我对spring非常陌生,我还不清楚后台会发生什么。请澄清您想使用哪个PasswordEncoder
。org.springframework.security.authentication.encoding
或org.springframework.security.crypto.password
一个。@M.Deinum是位于org.springframework.security.crypto.password
包下的新密码。您能否将其添加到您的问题中,因为这可能会影响如何,解决这个问题。另外,为什么您需要用户名,密码加密中使用的是用户名吗?为什么您要实现自己的AuthenticationProvider
?我建议使用旧的PasswordEncoder
(尽管它已被弃用),实现一个SaltSource
,为用户检索正确的salt,并让Spring安全性来完成硬任务。新的基于bcrypt的类旨在与系统范围的salt一起工作。而旧的PasswordEncoder
可以使用基于每个用户的salt.Vote-up进行共享。谢谢。我的情况很糟。任何想法。未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际上是在web请求中操作,并且仍然收到此消息,那么您的代码可能是在DispatcherServlet之外运行的:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。我将getParameter(“用户名”)
更改为getParameter(“用户名”)
,它可以工作。