spring 使用Sping Boot 进行简单密码加密

zsohkypk  于 2022-11-28  发布在  Spring
关注(0)|答案(5)|浏览(140)

1.下面是我的Bean类

package com.naveen.entity;

    import org.springframework.context.annotation.Bean;

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

    public String encode(String passWord) {
        // TODO Auto-generated method stub
        return null;
    }

}

1.然后,我创建了BCryptPasswordEncoder.java类,如下所示:

package com.naveen.entity;
    import org.springframework.stereotype.Component;
    @Component
    public class BCryptPasswordEncoder extends PasswordEncoder {

    }

1.然后,我自动连接了Controller类,并在saveUser()中添加了加密函数,如下所示:

public class UserController {

    @Autowired 
    PasswordEncoder passwordEncoder;
    @PostMapping("/saveUser")
    public int saveUser(@RequestBody User user) throws Exception {
    
        
        String encryptedPassword =passwordEncoder.encode(user.getPassWord());
           user.setPassWord(encryptedPassword);
    userService.saveUser(user);
        System.out.println("Inserted data with id: "+ user.getId());
     return 1;
     }

4. Service class as follows,

        @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserMapper userMapper;
        @Override
        public void saveUser(User user) {
            userMapper.saveUser(user);
        } }

当我运行代码时,我得到了下面的错误,com.naveen.controller中的字段passwordEncoder。UserController需要一个类型为“com.naveen.entity.PasswordEncoder”的bean,但找不到。注入点有以下注解:- @org.springframework.beans.工厂.注解.自动连线(必需=true)操作:请考虑在配置中定义类型为“com.naveen.entity.PasswordEncoder”的Bean。
请帮我解决我哪里出了问题。

2eafrhcq

2eafrhcq1#

您需要将@Component注解添加到BCryptPasswordEncoder类中

import org.springframework.stereotype.Component;

@Component
public class BCryptPasswordEncoder extends PasswordEncoder{

}

那就行了。

u5i3ibmn

u5i3ibmn2#

在PumpkinX的回答中,请按以下顺序排列您的陈述:

String encryptedPassword =passwordEncoder.encode(user.getPassWord());
     user.setPassWord(encryptedPassword);
     userService.saveUser(user);
     System.out.println("Inserted data with id: "+ user.getId());

注意,在读取和编码数据之后,userService.saveUser(user);?由于你有top的这个语句,它导致它有空值。

643ylb08

643ylb083#

我知道我晚了。但是你错过了编码函数的实现。
只需将encode函数替换为以下代码即可。

public String encode(String passWord) {
    BCryptPasswordEncoder bCryptPasswordEncoder =
            new BCryptPasswordEncoder(10, new SecureRandom());
    return bCryptPasswordEncoder.encode(passWord);

}

这将加密密码,而不是返回空值。

5kgi1eie

5kgi1eie4#

如果你想要一个真实的的加密算法或加密机制来存储密码在yml文件或传递敏感数据到您的应用程序,你可以尝试和使用 JASYPT for Spring Boot .
Jasypt是一个在运行时加密和解密Sping Boot 属性的库,而不用担心如何处理加密逻辑和解密逻辑。

yjghlzjz

yjghlzjz5#

我只是扭曲了你的密码

  1. Bean类别
public class PasswordEncoder {
 @Bean
 public BCryptPasswordEncoder bCryptPasswordEncoder() {
     return new BCryptPasswordEncoder();
 }

}

  1. BCryptPasswordEncoder.java
public class PasswordEncoder {
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

}

1.密码编码

@Autowired
    BCryptPasswordEncoder passwordEncoder;
    @Transactional(rollbackFor = Exception.class)
    public UserResource saveDto(UserResource userResource) {
         userResource.setPassword(passwordEncoder.bCryptPasswordEncoder().encode(userResource.getPassword()));
        return userinfo.save(userResource);
    }

1.编码密码-Example

相关问题