簡體   English   中英

UsernameNotFoundException:Spring Boot + Spring Security中的登錄表單不起作用

[英]UsernameNotFoundException: Login form in Spring Boot + Spring Security doesn't work

我正在嘗試使用Spring Security和Spring Boot創建一個登錄表單,但是無法在數據庫中找到該用戶。 當我輸入憑據時,它只會給我錯誤。 注冊表可以使用。 您可以在這里查看整個項目: https : //github.com/ashofthephoenix/Blog/tree/master/src/main/java/com/paulthemenace/blog

它還給了我這個:

Hibernate: select user0_.id as id1_2_, user0_.full_name as full_nam2_2_, user0_.password as password3_2_, user0_.username as username4_2_ from users user0_ where user0_.username=?

我正在使用UserRepository:

@Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); }

我對UserDetailsS​​ervice的實現:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserRepository userRepo;

private final Logger log = LoggerFactory.getLogger(UserDetailsService.class);

public UserDetailsServiceImpl() {
    super();
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    // TODO Auto-generated method stub
    log.debug("Authenticating {}", username);
    final User user = userRepo.findByUsername(username);
    if( user == null) {
        throw new UsernameNotFoundException(username);
    } 
    return new UserPrincipalImpl(user);
}


}

UserDetails的實現:

public class UserPrincipalImpl implements UserDetails {

private final User user;
private static final long serialVersionUID = 1L;

public UserPrincipalImpl(User user)  {
    this.user = user;
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    // TODO Auto-generated method stub
    return null;
}

@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;
}
}

標記代碼:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<link rel="stylesheet" href="../public/css/login.css" 
th:href="@{/css/login.css}"/>
<title>Login</title>
</head>
<body>

<div class="container">
<div class="form">
<form method="post" th:action="@{/users/login}" class="login-form">
<p th:if="${param.error}"> Invalid username or password.</p>
<div><label for="username"></label></div>
<input type="text"  placeholder="username"/>


<div><label for="password"></label></div>
<input type="password" placeholder="password"/>


<div><input type="submit" value="Login"/></div>

</form>
</div>
</div>





</body>
</html>

LoginController:

@Controller

public class LoginController {


@RequestMapping(value = "users/login", method = RequestMethod.GET)
public String login(Model model) {

    return "users/login";
}
}

安全配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/").hasRole("USER").and().formLogin().loginPage("/users/login").permitAll()
            .and().logout().permitAll();
}

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/resources/**", "/public/**", "/css/**", "/js/**", "/images/**");

}

@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProvider());
}

@Bean
public DaoAuthenticationProvider authenticationProvider() {
    final DaoAuthenticationProvider authProvider = new 
DaoAuthenticationProvider();
    authProvider.setUserDetailsService(userDetailsService);
    return authProvider;

}
}

謝謝您的幫助。 如果我不夠具體,對不起,但是這個問題正在使我喪命。 如果您願意提供幫助,請告訴我我沒有提供的信息,我會提供給您。

您的登錄表單元素缺少名稱屬性:

<input type="text" name="username" placeholder="username"/>
<input type="password" name="password" placeholder="password"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM