java - 没有从数据库中获取数据
问题描述
当我尝试登录时,我收到休眠日志消息。
用户.java
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "username", unique = true,
nullable = false, length = 45)
private String username;
@Column(name = "password",
nullable = false, length = 100)
private String password;
@Column(name = "enabled", nullable = false)
private boolean enabled;
/*@OneToOne(cascade=CascadeType.ALL)*/
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="user_roles",
joinColumns = {@JoinColumn(name="user_name", referencedColumnName="username")},
inverseJoinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")})
private Set<UserRole> userRole = new HashSet<UserRole>(0);
public Set<UserRole> getUserRole() {
return this.userRole;
}
public void setUserRole(Set<UserRole> userRole) {
this.userRole = userRole;
}
getter and setter
用户角色.java
@Entity
@Table(name="roles")
public class UserRole {
@Id
@GeneratedValue
private Integer id;
private String role;
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="user_roles",
joinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")},
inverseJoinColumns = {@JoinColumn(name="user_name", referencedColumnName="username")}
)
private Set<User> userRoles;
public Set<User> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<User> userRoles) {
this.userRoles = userRoles;
}
getter and setter
我有登录表单并使用带有hibernate的spring security进行身份验证和授权。当我尝试使用数据库中的用户名和密码登录时,我收到错误提示用户名和密码无效。并在控制台中休眠日志消息:
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate:
select
user0_.username as username1_2_,
user0_.enabled as enabled2_2_,
user0_.password as password3_2_
from
users user0_
where
user0_.username=?
Hibernate:
select
userrole0_.user_name as user_nam2_1_0_,
userrole0_.role_id as role_id1_1_0_,
userrole1_.id as id1_0_1_,
userrole1_.role as role2_0_1_
from
user_roles userrole0_
inner join
roles userrole1_
on userrole0_.role_id=userrole1_.id
where
userrole0_.user_name=?
我正在添加 SpringSecurityConfig.java 并且我使用了哈希密码。这是造成问题的原因吗?
Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
@Qualifier("userDetailsService")
UserDetailsService userDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/**")
.access("hasRole('ROLE_ADMIN')").and().formLogin()
.loginPage("/login").failureUrl("/login?error")
.usernameParameter("username")
.passwordParameter("password")
.and().logout().logoutSuccessUrl("/login?logout")
.and().csrf()
.and().exceptionHandling().accessDeniedPage("/403");
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
}
解决方案
你有堆栈跟踪吗?
数据库连接是否正常工作?
数据库中的密码是散列的。
推荐阅读
- c# - c# 将字符串解析为日期。'yyyyMMddHHmmss.ffffff+zzz'
- java - 值未存储在不同方法之间的变量中(初学者java项目)
- python - Docker如何将python 3.8设为默认
- python - 如何在 Django 中存储文件
- python - 如何根据两个现有数据框和匹配的条件从循环中创建多个数据框?
- windows - 有没有办法确定 Wix 安装中的 GPU 数量?
- html - 当动态 iframe 来自其他网站时,如何使滚动消失?
- python - from x import y 在 python 中无法正常工作
- docker - 如何在tomcat docker容器中打开jenkins
- numpy - 如何进行数组赋值