[英]Spring Boot Security 4 custom PasswordEncoder
我在包含MD5(用户名+密码)的数据库中有一个密码字段。 我将如何在Spring Security + JdbcAuthentication中实现这一点。 我知道这绝对不安全,但是它是旧数据库,我必须与之讨论。 我当前的代码如下所示:
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select login, password, 1 as enabled from
login where login=?")
.authoritiesByUsernameQuery("select login,role" +
" from login lo" +
" join login_role lor on lo.login_id = lor.login_id" +
" join role gr on lor.role_id = gr.role_id" +
" where login=?")
如果我将哈希值作为密码发送,则身份验证有效。 我想我必须配置一些密码编码器。
您可以像这样将整个身份验证配置到applicationContext.xlm中:
<sec:authentication-manager>
<sec:authentication-provider>
<sec:password-encoder ref="encoder" /> // And here is an encoder that will encode a password which comes from login form.
<sec:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="your query"
authorities-by-username-query="your query for authentication table" />
</sec:authentication-provider>
</sec:authentication-manager>
我今天在学校尝试过,对我有用。 我发现这是解决我的权限问题的最简单方法,希望它也将是适合您的解决方案。
PS。 抱歉,不确定我的答案将如何显示。 仅在这里读过一年的读者,现在决定自己加入并写一些问题
我采用了骇人听闻的方法,并在ServletFilter中重写了Request Parameters。 这样做的关键是使用自定义HttpServletRequestWrapper能够修改请求。
现在,用户名和密码作为密码传递给md5编码器。 遇到一些大写/小写问题,但是调整SQL可以解决此问题。
您应该喜欢以下内容
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth)
throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery("sql...")
.authoritiesByUsernameQuery("sql...");
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
希望对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.