Röviden bemutatok egy Spring Boot alkalmazást, amely felhasználók és adataik kezelésére szolgál. Itt nem részletezek minden egyes fájlt, csak azokat amelyeket fontosnak tartok.
...
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "users_roles", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {
@JoinColumn(name = "role_id") })
private Set<Role> roles = new HashSet<Role>();
...
public enum Status {
A("Active"), P("Progress"), D("Deleted");
private final String displayValue;
private Status(String displayValue) {
this.displayValue = displayValue;
}
public String getDisplayValue() {
return displayValue;
}
}
INSERT INTO
'roles'
(`id`,
`role`)
VALUES
(1,
'ROLE_USER');
INSERT INTO
'roles'
(`id`,
`role`)
VALUES
(2,
'ROLE_ADMIN');
INSERT INTO
'users'
(`id`,
`first_name`,
`last_name`,
`username`,
`date_of_birth`,
`email`,
`password`,
`enabled`,
`status`,
`activation`)
VALUES
(1,
'Alfonz',
'Admin',
'admin',
'1980-01-01',
'admin@test.com',
'$2a$10$nDYm9EL00h/PzIFL1szXHul06U18hgUtgo7aRDS3ntYeSv7tiE4zO',
b'1',
'A',
'CURRENT_TIMESTAMP');
INSERT INTO
'users_roles'
(`user_id`,
`role_id`)
VALUES
(1,
1),
(1,
2);
A users táblában létrehozunk egy ADMIN jogosultsággal rendelkező felhasználót is.
#MySql
spring.datasource.url=jdbc:mysql://localhost:3306/adatbazis_neve
spring.datasource.username=adatbazis_felhasznalonev
spring.datasource.password=adatbazis_jelszo
A JPA az entitánsok alapján létrehozza az adattáblákat és feltölti a data.sql-ben megadott tartalommal.
spring.jpa.hibernate.ddl-auto=create-drop
A regisztrációs levél küldéséhez szintén az application.properties fájlban adjuk meg a levelezési postafiókunk adatait.
Az itt megadott e-mail cím fog szerepelni a kiküldött levélben.
...
@PostMapping("/reg")
public String regSubmit(@ModelAttribute("user") @Valid UserRegistrationDto userRegDto, BindingResult result) {
if (result.hasErrors()) return "registration";
userService.registerUser(userRegDto.convertToUser());
return "redirect:/registration?success";
}
...
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/users/**").hasRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
.antMatchers("/**/*.css",
"/",
"/home",
"/registration",
"/reg",
"/activation/**").permitAll()
.anyRequest().authenticated().and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/profile")
.permitAll().and()
.logout()
.logoutSuccessUrl("/login?logout")
.permitAll();
}
...
@FieldMatch
(first = "password",
second = "confirmPassword",
message = "{user.password.FieldMatch}")
@UniqueEmail
(message = "{user.email.alreadyExist}")
@UniqueUsername
(message = "{user.username.alreadyExist}")
@ValidDate
(message = "{user.dateOfBirth.NotValid}")
@ValidEmail
(message = "{user.email.NotValid}")
@ValidPassword
(message = "{user.password.NotValid}")
© 2021 Szikora Zoltán. Minden jog fenntartva.