java - Spring Security & inMemoryAuthentication() & Bad Credentials
问题描述
我在内存中设置用户的简单登录配置存在问题。每次我都找回坏凭证。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//auth.userDetailsService(userDetailsService);
auth.
inMemoryAuthentication()
.withUser("user").password("123").roles("USER")
.and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/location")
.hasAnyRole("ADMIN","USER")
.and()
.formLogin()
.and()
.csrf()
.disable();
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
我做错了什么??
解决方案
让我们稍微简化一下。如果您正在使用formLogin()
您所要做的就是指定 aUserDetailsBean
并且您可以将其与编码器一起使用:
@Bean
public PasswordEncoder passwordEncoder(){
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
builder()
.passwordEncoder(input -> passwordEncoder().encode(input))
.username("user")
.password("123")
.roles("USER")
.build(),
builder()
.passwordEncoder(input -> passwordEncoder().encode(input))
.username("admin")
.password("password")
.roles("USER", "ADMIN")
.build()
);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
//application security
.authorizeRequests()
.mvcMatchers("/non-secure/**").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
;
// @formatter:on
}
非常欢迎您下载示例并在您的 IDE 中运行单元测试
现在这不是首选方式,因为您的代码中有明文密码。您可以将其替换为已加密密码的管理员。
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
builder()
.username("user")
.password("{bcrypt}$2a$10$C8c78G3SRJpy268vInPUFu.3lcNHG9SaNAPdSaIOy.1TJIio0cmTK")
.roles("USER")
.build(),
builder()
.username("admin")
.password("{bcrypt}$2a$10$XvWhl0acx2D2hvpOPd/rPuPA48nQGxOFom1NqhxNN9ST1p9lla3bG")
.roles("USER", "ADMIN")
.build()
);
}
推荐阅读
- sorting - QUERY 函数需要显示文本,但我需要排序的数字
- c - 向客户端 C 广播服务器
- django - 在 Heroku 上部署 Django 应用程序时无法解决 ModuleNotFoundError
- java - 用 Java.awt.graphics 打印的图像模糊?
- flutter-dependencies - Flutter 通知侦听器 v2 示例不会运行
- python - 在 Docker 中使用 pip 安装无法找到模块
- html - 用反应滚动反应导航栏
- google-cloud-run - 如何在构建 Cloud Run 时清除 Kaniko 缓存
- php - 发出 POST 请求时出现推送错误的 Laravel WebSocket
- c# - Xamarin.Forms Shell 页面中的自定义 TitleView(顶部栏)