Я пытаюсь создать рабочую регистрацию / логин.Однако во время этого процесса я столкнулся с проблемой, когда я не могу войти, несмотря на использование зарегистрированной учетной записи, которая была создана с помощью страницы регистрации заранее.Судя по тому, что я вижу, в моем классе контроллера, похоже, есть ошибка, но я не могу ее найти.Как реализовать метод, позволяющий входу в систему извлекать зарегистрированные данные из базы данных для использования при входе в систему?
Я не пробовал ни одного метода, поскольку не могу обнаружить ошибку
Воткод входа в систему:
@Autowired
UserRepository userrepository;
@RequestMapping("/login")
public String loginPage()
{
return "login";
}
@RequestMapping("/logout-success")
public String logoutPage()
{
return "logout";
}
Вот регистрационный код:
@RequestMapping("/register")
public String register() {
return "signup";
}
@RequestMapping(value = "/register/user")
public String addUser(@RequestParam String username, @RequestParam String password) {
User user = new User(username, password);
userrepository.save(user);
return "redirect:/login";
}
вот код репозитория:
User findByUsername(String username);
Вот код для пользователя:
@Id
private long id;
private String username;
private String password;
private String email;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
А вот код формы AppSecurityConfig, MyUserDetailsService и UserDetailImplementation
AppSecurityConfig:
@Autowired
private UserDetailsService userDetailsService;
@Bean
public AuthenticationProvider authProvider()
{
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsService);
provider.setPasswordEncoder(new BCryptPasswordEncoder());
return provider;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests().antMatchers("/login", "/", "/register", "/register/user").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().invalidateHttpSession(true)
.clearAuthentication(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/logout-success").permitAll();
}
MyUserDetailsService:
@Autowired
private UserRepository repo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = repo.findByUsername(username);
if(user==null)
throw new UsernameNotFoundException("User 404");
return new UserPrincipal(user);
}
* 1024lee: пользовательская / пользовательская версия: пользовательский интерфейс
private User user;
public UserPrincipal(User user) {
super();
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority("USER"));
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return user.getPassword();
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
Вот страница входа в систему и регистрации html:
Логин:
<form action="login" method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username' value=''></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="submit" /></td>
</tr>
</table>
</form>
</body>
Регистрация:
<form action="/register/user" method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username' value=''></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="submit" /></td>
</tr>
</table>
</form>
Из кода вышеКажется, в коде нет ничего плохого.Ожидаемый результат - информация о регистрации пользователя может использоваться для входа в систему, однако при попытке входа она не работает.