Sorry im Voraus für mein schlechtes Englisch ..Spring Boot mit Spring Security und benutzerdefinierte Datenbank
Da ich meine Datenbankkonfiguration geändert habe, gelingt es mir nicht, mich auf meine Anwendung zu protokollieren. Ich verwende Spring-Sicherheit. Vor den Änderungen hat alles funktioniert.
Ich habe zwei Entitäten:
- User.java
- UserRole.java
User.java
package betizy.models;
//imports
@Entity
@Table(name = "use_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="USE_ID")
private Long id;
@NotNull
@Column(name = "USE_USERNAME")
private String username;
@NotNull
@Column(name = "USE_PASSWORD")
private String password;
@NotNull
@Column(name = "USE_EMAIL")
private String email;
//getters and setters
}
UserRole.java
package betizy.models;
//imports
@Entity
@Table(name = "usr_user_role")
public class UserRole {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="USR_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "USR_USE_ID")
private User user;
@NotNull
@Column(name = "USR_ROLE")
private String role;
//getters and setters
}
login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Security Example </title>
<script src="/webjars/angularjs/1.4.9/angular.js"></script>
<script src="webjars/jquery/2.0.3/jquery.min.js"></script>
<link rel="stylesheet" href="/webjars/bootstrap/3.3.6/css/bootstrap.css">
<script src="/js/index.js"></script>
</head>
<body ng-app="Betizy">
<div header></div>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username" required/> </label></div>
<div><label> Password: <input type="password" name="password" required/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
<div>To open a new account click <a href="/register">here</a>. </div>
<div footer></div>
</body>
</html>
SecurityConfig.java
package betizy.security;
//imports
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
//.passwordEncoder(passwordEncoder())
.usersByUsernameQuery(
"select * from use_user where use_user.use_username=?")
.authoritiesByUsernameQuery(
"select * from usr_user_role inner join use_user on use_user.use_id = usr_user_role.usr_use_id where use_user.use_username=?");
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
//.antMatchers("/hello").access("hasRole('ROLE_ADMIN')")
.antMatchers("/", "/register", "/user/create", "/webjars/**", "/js/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.usernameParameter("username").passwordParameter("password")
.and()
.logout().permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403")
.and()
.csrf().disable();
}
}
Ich denke Problem mit Namen meiner User
Einheit Felder oder meine beiden Abfragen in SecurityConfig.java ist, aber ich habe keine Ahnung, wie kann ich tun, um zu lösen mein Problem.
Ich muss meine Datenbankkonfiguration (Name der Felder) behalten.
Vielen Dank im Voraus für Ihre Hilfe! :)
EDIT
Mit zwei Änderungen auf alle Werke, aber es ist nicht die gute Datenbank. Ich werde nach Unterschiede zwischen den beiden Datenbanken und Unterschiede in SecurityConfig.java
Die erste Basis (es ist Werke)
User table
User Role table
Mit SecurityConfig. java
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"select username,password, enabled from users where username=?")
.authoritiesByUsernameQuery(
"select username, role from user_roles where username=?");
}
Second es funktioniert nicht. Ich kann keine Links, aber Sie haben die perfekte Beschreibung oben in User.java und UserRole.java
Mit SecurityConfig.java
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"select use_username, use_password, use_email from use_user where use_username=?")
.authoritiesByUsernameQuery(
"select use_username, usr_role from usr_user_role, use_user where use_id = usr_use_id and use_username=?");
}
Name meiner Entitäten Felder zum Beispiel. Ich habe diese http://www.raistudies.com/spring-security-tutorial/custom-tables-spring-security/ gefunden, aber ich benutze Spring Boot also wo ist diese Datei? –
Was ist der Fehler, den Sie bekommen? Veröffentlichen Sie die Protokolle. – Jobin
Ich habe keine Protokolle oder Fehler .. Ich weiß nicht warum. –