java - 如何在没有密码编码的情况下使用Spring Security?

标签 java spring spring-boot spring-security spring-data-jpa

我目前正在尝试学习 Spring 安全性。我使用 BCryptPasswordEncoder 在保存到数据库之前对用户密码进行编码

代码:

@Override
    public void saveUser(User user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        user.setActive(1);
        Role userRole = roleRepository.findByRole("ADMIN");
        user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
        userRepository.save(user);
    }

然后在身份验证期间也使用它,用户按预期获得身份验证。

@Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.
            jdbcAuthentication()
                .usersByUsernameQuery(usersQuery)
                .authoritiesByUsernameQuery(rolesQuery)
                .dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
    }

然后我从 configure() 方法中删除了 .passwordEncoder(bCryptPasswordEncoder); ,仍然使用编码密码的用户成功通过了身份验证。

然后我从 saveUser()configure() 方法中删除了密码编码器,并将一个 User 保存到数据库中(即没有密码编码)并尝试访问经过身份验证的页面,但我得到了 AccessedDeniedException

但是即使我删除了 passwordEncoder(),具有编码密码的用户仍然会通过身份验证 来自 configure() 方法。为什么会这样?

spring security在认证时默认使用密码编码器吗?

如果是这样,如何在没有密码编码的情况下使用 spring security?

最佳答案

也许你可以实现这个简单的代码来规避Spring Encoder

public class PasswordEnconderTest implements PasswordEncoder {
    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return charSequence.toString().equals(s);
    }
}

并在您的 WebSecurityConfig 中添加:

@Bean
public PasswordEncoder passwordEncoder(){
    return new PasswordEnconderTest();
}

不推荐,但你可以实现

关于java - 如何在没有密码编码的情况下使用Spring Security?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51208425/

相关文章:

java - 使用相同的资源位置执行和构建 maven2 java jar 项目

java - 在 REST API 的 java 中使用 HttpURLConnection 进行 POST 时,响应代码为 400

java - Spring AMQP 手动容器异常缓慢

java - 使用 Spring 框架在整个应用程序中保留一个对象

java - Spring Boot FlywayException : Unable to connect to the database. 配置url、用户和密码

java - 基本计算 "Multiple markers on this line syntax error, delete this token"

java - 如何解析从 Google 的图像搜索 API 返回的这个 JSON 字符串?

java - NoSuchBeanDefinitionException : No qualifying bean of type "XInterceptor"

java - REST API : org. springframework.beans.factory.UnsatisfiedDependencyException:

java - Spring Requestparam中+(plus)的反序列化