spring-boot - Spring Boot 安全性 - inMemoryAuthentication 不起作用
问题描述
这是我的安全配置代码:
@EnableWebSecurity
@EnableGlobalMethodSecurity (
prePostEnabled=true
)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.inMemoryAuthentication()
.withUser("chandra").password("{noop}1234").roles("USER").and()
.withUser("admin").password("{noop}admin123").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/addItem","/delete").hasRole("ADMIN")
.antMatchers("/getAllItems").hasRole("USER")
.and().csrf().disable().headers().frameOptions().disable()
.and()
.formLogin();
}
}
但是在编译 spring 时仍在为我生成密码。
Using generated security password: 49f04bde-ac1f-4e30-870b-ba0dd93d50f3
我通过打印语句检查了配置是否正在加载,发现安全配置正在加载。我应该进行任何更改以使其与给定的用户 ID 和密码一起工作。
提前致谢。
解决方案
只是关于纯文本密码的默认提示,您可以想象接下来会发生什么。:-)
无论如何,出于测试目的,您可以在您的@Configuration
班级中定义一个这样的无操作密码编码器:
为了使您的前置noop
工作,请务必公开以下 bean:
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
有关详细信息,请参阅参考手册中的相应章节。作为替代方案,您可以提供良好的旧密码管理器本身:
import org.springframework.security.crypto.password.PasswordEncoder;
[…]
@Bean
public NoOpPasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
推荐阅读
- sql - Oracle SQL 创建带字符集的表
- swift - 将 MLMultiArray 转换为 [Double] 会导致 NaN
- jquery - 如何使用复选框制作一个赞按钮以将随机生成的引号存储到数组中
- javascript - 使用材质 ui 在开关内添加文本
- aws-glue - 使用 aws glue python shell 连接到 Oracle RDS 数据库
- php - 每个页面和页面的每个输入字段的基于动态角色的访问控制
- python-2.7 - 创建永久(固定)conda 环境
- r - 在数据框中的多列中仅保留负值
- javascript - 为什么 for (...in...) 循环在遍历对象方法时不返回键
- javascript - 向 Netlify 提供服务命令