[英]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); }
我对UserDetailsService的实现:
@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.