1 package net.sumaris.server.http.security;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import lombok.AllArgsConstructor;
26 import lombok.NonNull;
27 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
28 import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
29 import org.springframework.security.core.AuthenticationException;
30 import org.springframework.security.core.userdetails.UserDetails;
31 import org.springframework.security.core.userdetails.UsernameNotFoundException;
32 import org.springframework.stereotype.Component;
33
34 import java.util.Optional;
35
36 import static lombok.AccessLevel.PACKAGE;
37
38
39
40
41 @Component
42 @AllArgsConstructor(access = PACKAGE)
43 public class TokenAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
44
45 @NonNull
46 private AuthService authService;
47
48 @Override
49 protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
50
51 }
52
53 @Override
54 protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
55 final Object token = authentication.getCredentials();
56 return Optional
57 .ofNullable(token)
58 .map(String::valueOf)
59 .flatMap(authService::authenticate)
60 .orElseThrow(() -> new UsernameNotFoundException("Cannot find user with authentication token=" + token));
61 }
62 }