Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"的中文翻译为:无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"。

11 浏览
0 Comments

Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"的中文翻译为:无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"。

我正在尝试使用Spring创建登录和注册表单。我对Spring还不熟悉。\n我遇到了以下错误:\n

无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)",因为"net.cdac.TMS.service.UserServiceImpl.passwordEncoder"为空
java.lang.NullPointerException: 无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)",因为"net.cdac.TMS.service.UserServiceImpl.passwordEncoder"为空
    at net.cdac.TMS.service.UserServiceImpl.save(UserServiceImpl.java:36)
    at net.cdac.TMS.web.UserRegistrationController.registerUserAccount(UserRegistrationController.java:36)
    ...

\n我的User.java代码如下:\n

...
@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "uemailid"))
public class User {
    ...
}

\nUserServiceImpl.java代码如下:\n

...
@Service
public class UserServiceImpl implements UserService{
    ...
    @Autowired
    private static BCryptPasswordEncoder passwordEncoder;
    ...
}

\nUserRegistrationDto.java代码如下:\n

...
public class UserRegistrationDto {
    ...
}

\nUserRegistrationController.java代码如下:\n

...
@Controller
@RequestMapping("/registration")
public class UserRegistrationController {
    ...
}

\nRole.java代码如下:\n

...
@Entity
@Table(name = "role")
public class Role {
    ...
}

\n我不明白导致这个错误的原因以及如何解决它。非常感谢您的帮助。

0
0 Comments

在这段代码中,问题出现在调用`BCryptPasswordEncoder.encode(java.lang.CharSequence)`方法时出现了`Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"`的错误。这个错误的原因是在调用`encode`方法时,没有实例化`BCryptPasswordEncoder`对象。

解决这个问题的方法是将`private static BCryptPasswordEncoder passwordEncoder;`修改为`private BCryptPasswordEncoder passwordEncoder;`,即去掉`static`关键字。这样就可以在后续的代码中实例化`BCryptPasswordEncoder`对象,并成功调用`encode`方法。

下面是修改后的代码:

private BCryptPasswordEncoder passwordEncoder;

感谢上述修改,问题已经解决了。

0