spring-boot - 如何摆脱为id“null”映射的No PasswordEncoder
问题描述
我参加了一个春季课程,我们正在制作带有登录模块的小预算应用程序。在处理用户登录密码类时,我遇到了 PasswordEncoder 问题。虽然在我看来,在这个阶段不需要密码编码器,但可能是我错了,因为我遵循的课程已经过时了。我遇到了相同的堆栈,但由于它们的编码结构不同而无法理解。如果有人能解释如何摆脱这个错误,感激不尽:
我在 MySql 和数据中也有如下模式:
用户表列用户名、密码值 user1、password123
权限表列权限,user_id 值 ROLE_USER,1
课程如下:
用户.java
@Data
@AllArgConstructor
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
private String password;
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")
private Set<Authority>authorities = new HashSet<>();
权限.java
@Data
@AllArgConstructor
@Entity
public class Authority implements GrantedAuthority {
private static final long serialVersionUID = 5919753070016527655L;
@Id
@GeneratedValue
private Long id;
private String authority;
@ManyToOne
private User user;
安全配置.java
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/js/*", "/css/*").permitAll()
.antMatchers("/**").hasRole("USER").and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/budgets")
.permitAll().and()
.logout()
.logoutSuccessUrl("/")
.permitAll();
}
}
安全用户.java
public SecurityUser(User user) {
this.setAuthorities(user.getAuthorities());
this.setBudgets(user.getBudgets());
this.setId(user.getId());
this.setPassword(user.getPassword());
this.setUsername(user.getUsername());
}
@Override
public Set<Authority> getAuthorities() {
return super.getAuthorities();
}
@Override
public String getPassword() {
return super.getPassword();
}
@Override
public String getUsername() {
return super.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
UserDetailsServiceImpl.java
@Repository
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepo.findByUsername(username);
if (user == null)
throw new UsernameNotFoundException("User does not exist");
return new SecurityUser(user);
}
}
用户存储库.java
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername (String username);
}
解决方案
推荐阅读
- python - 香农多样性计划:基本问题
- java - 如何将捕获/保存的图像从相机获取到另一个应用程序?
- r - 用于通过给定窗口改变、标记或识别围绕条件的记录的功能
- docker - 在 OpenShift 上设置 OrientDB 服务器集群
- javascript - 在 Node.js 中执行目录检查
- javascript - 实时验证消息错误
- swift - 让 tvOS 游戏手柄按钮在每次物理按下按钮时仅发送一次消息
- vba - 测试工作表是否为未定义的 VBA
- python - 如果行中的单元格包含希伯来语、阿拉伯语或俄语字符,如何删除(或处理)csv 文件中的行?
- c# - C# BotFrameWork Q & A Maker ,你的意思是响应吗?