Я работаю над проектом весенней загрузки. Но у меня проблема с пружинной безопасностью.
Я могу зарегистрироваться, но я не могу войти.
Когда я пытаюсь войти, он просто дает эту ошибку: и? Ошибка от URL:
Ваша попытка входа не удалась, попробуйте еще раз.
Причина: плохие учетные данные
и soesnt выдает любую ошибку из консоли.
я проверил пользователей, успешно зарегистрировавшихся.
Настройка безопасности:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select email as principal, password as crendentials, true from user where email=?")
.authoritiesByUsernameQuery("select user_id as principal, role_name as role from user_roles where user_id=?")
.passwordEncoder(passwordEncoder()).rolePrefix("ROLE_");
}
@Bean
public PasswordEncoder passwordEncoder() {
// TODO Auto-generated method stub
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/register", "/login", "/", "/welcome", "/static/**").permitAll()
.anyRequest().authenticated().and().formLogin()
.loginPage("/login")
.permitAll().defaultSuccessUrl("/profile").and().logout()
.logoutSuccessUrl("/login");
}
}
Контроллер:
@RequestMapping("/login")
public String login(HttpServletRequest request) {
request.setAttribute("mode", "MODE_LOGIN");
return "welcomepage";
}
роль дБ:
@Entity
public class Role {
@Id
private String name;
@ManyToMany(mappedBy="roles")
private List<User> users;
user db:
@Entity
public class User {
@Id
@Column(unique = true)
@NotNull
@GeneratedValue
private Long id;
@NotEmpty
private String username;
@Email
@Column(unique = true)
@NotEmpty
private String email;
@NotEmpty
private String firstname;
@NotEmpty
private String lastname;
@NotNull
private int age;
@Size(min = 4)
private String password;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "USER_ROLES", joinColumns = {
@JoinColumn(name = "USER_ID", referencedColumnName = "id") }, inverseJoinColumns = {
@JoinColumn(name = "ROLE_NAME", referencedColumnName = "name") })
private List<Role> roles;
есть моя страница входа html:
<c:when test="${mode=='MODE_LOGIN' }">
<div class="container text-center">
<h3>User Login</h3>
<hr>
<form class="form-horizontal" method="POST" action="/login">
<c:if test="${not empty param}">
<div class="alert alert-danger">
<h2>Invalid Email or Password</h2>
</div>
</c:if>
<div class="form-group">
<label class="control-label col-md-3">Email</label>
<div class="col-md-7">
<input type="text" class="form-control" name="username"
value="${user.email }" id="email" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Password</label>
<div class="col-md-7">
<input type="password" class="form-control" name="password"
value="${user.password }" id="password" />
</div>
</div>
<div class="form-group ">
<input type="submit" class="btn btn-primary" value="Login" />
</div>
</form>
</div>
</c:when>
</c:choose>