Skip to content

Commit da060d9

Browse files
admin@javaops.ruadmin@javaops.ru
authored andcommitted
4_04_db_security_auth_user
1 parent c433b15 commit da060d9

File tree

6 files changed

+65
-11
lines changed

6 files changed

+65
-11
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ru.javaops.bootjava;
2+
3+
import lombok.Getter;
4+
import lombok.ToString;
5+
import org.springframework.lang.NonNull;
6+
import ru.javaops.bootjava.model.User;
7+
8+
@Getter
9+
@ToString(of = "user")
10+
public class AuthUser extends org.springframework.security.core.userdetails.User {
11+
12+
private final User user;
13+
14+
public AuthUser(@NonNull User user) {
15+
super(user.getEmail(), user.getPassword(), user.getRoles());
16+
this.user = user;
17+
}
18+
19+
public int id() {
20+
return user.id();
21+
}
22+
}
Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,43 @@
11
package ru.javaops.bootjava.config;
22

3+
import lombok.AllArgsConstructor;
4+
import lombok.extern.slf4j.Slf4j;
35
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Bean;
47
import org.springframework.context.annotation.Configuration;
58
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
69
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
710
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
11+
import org.springframework.security.core.userdetails.UserDetailsService;
12+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
813
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
14+
import ru.javaops.bootjava.AuthUser;
15+
import ru.javaops.bootjava.model.User;
16+
import ru.javaops.bootjava.repository.UserRepository;
17+
18+
import java.util.Optional;
919

1020
@Configuration
1121
@EnableWebSecurity
22+
@Slf4j
23+
@AllArgsConstructor
1224
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
1325

26+
private final UserRepository userRepository;
27+
28+
@Bean
29+
public UserDetailsService userDetailsService() {
30+
return email -> {
31+
log.debug("Authenticating '{}'", email);
32+
Optional<User> optionalUser = userRepository.findByEmailIgnoreCase(email);
33+
return new AuthUser(optionalUser.orElseThrow(
34+
() -> new UsernameNotFoundException("User '" + email + "' was not found")));
35+
};
36+
}
37+
1438
@Autowired
1539
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
16-
auth.inMemoryAuthentication()
17-
.passwordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder())
18-
.withUser("user@gmail.com").password("{noop}password").roles("USER").and()
19-
.withUser("admin@javaops.ru").password("{noop}admin").roles("USER", "ADMIN");
40+
auth.userDetailsService(userDetailsService())
41+
.passwordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
2042
}
2143
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package ru.javaops.bootjava.model;
22

3-
public enum Role {
3+
import org.springframework.security.core.GrantedAuthority;
4+
5+
public enum Role implements GrantedAuthority {
46
ROLE_USER,
5-
ROLE_ADMIN
7+
ROLE_ADMIN;
8+
9+
@Override
10+
public String getAuthority() {
11+
return name();
12+
}
613
}

src/main/java/ru/javaops/bootjava/model/User.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import javax.validation.constraints.Email;
77
import javax.validation.constraints.NotEmpty;
88
import javax.validation.constraints.Size;
9+
import java.io.Serializable;
910
import java.util.Set;
1011

1112
@Entity
@@ -15,7 +16,7 @@
1516
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1617
@AllArgsConstructor
1718
@ToString(callSuper = true, exclude = {"password"})
18-
public class User extends BaseEntity {
19+
public class User extends BaseEntity implements Serializable {
1920

2021
@Column(name = "email", nullable = false, unique = true)
2122
@Email

src/main/java/ru/javaops/bootjava/web/AccountController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import org.springframework.web.bind.annotation.GetMapping;
66
import org.springframework.web.bind.annotation.RequestMapping;
77
import org.springframework.web.bind.annotation.RestController;
8+
import ru.javaops.bootjava.AuthUser;
9+
import ru.javaops.bootjava.model.User;
810

911
@RestController
1012
@RequestMapping(value = "/api/account")
1113
public class AccountController {
1214

1315
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
14-
public Object get(@AuthenticationPrincipal Object authUser) {
15-
return authUser;
16+
public User get(@AuthenticationPrincipal AuthUser authUser) {
17+
return authUser.getUser();
1618
}
1719
}

src/main/resources/data.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
INSERT INTO USERS (EMAIL, FIRST_NAME, LAST_NAME, PASSWORD)
2-
VALUES ('user@gmail.com', 'User_First', 'User_Last', 'password'),
3-
('admin@javaops.ru', 'Admin_First', 'Admin_Last', 'admin');
2+
VALUES ('user@gmail.com', 'User_First', 'User_Last', '{noop}password'),
3+
('admin@javaops.ru', 'Admin_First', 'Admin_Last', '{noop}admin');
44

55
INSERT INTO USER_ROLE (ROLE, USER_ID)
66
VALUES ('ROLE_USER', 1),

0 commit comments

Comments
 (0)