Skip to content

Commit 3dae146

Browse files
author
Nelson
committed
7
1 parent b1170ca commit 3dae146

File tree

5 files changed

+187
-38
lines changed

5 files changed

+187
-38
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.example.demo.auth;
2+
3+
import org.springframework.security.core.GrantedAuthority;
4+
import org.springframework.security.core.userdetails.UserDetails;
5+
6+
import java.util.Collection;
7+
import java.util.Set;
8+
9+
public class ApplicationUser implements UserDetails {
10+
11+
private final String username;
12+
private final String password;
13+
private final Set<? extends GrantedAuthority> grantedAuthorities;
14+
private final boolean isAccountNonExpired;
15+
private final boolean isAccountNonLocked;
16+
private final boolean isCredentialsNonExpired;
17+
private final boolean isEnabled;
18+
19+
public ApplicationUser(String username,
20+
String password,
21+
Set<? extends GrantedAuthority> grantedAuthorities,
22+
boolean isAccountNonExpired,
23+
boolean isAccountNonLocked,
24+
boolean isCredentialsNonExpired,
25+
boolean isEnabled) {
26+
this.username = username;
27+
this.password = password;
28+
this.grantedAuthorities = grantedAuthorities;
29+
this.isAccountNonExpired = isAccountNonExpired;
30+
this.isAccountNonLocked = isAccountNonLocked;
31+
this.isCredentialsNonExpired = isCredentialsNonExpired;
32+
this.isEnabled = isEnabled;
33+
}
34+
35+
@Override
36+
public Collection<? extends GrantedAuthority> getAuthorities() {
37+
return grantedAuthorities;
38+
}
39+
40+
@Override
41+
public String getPassword() {
42+
return password;
43+
}
44+
45+
@Override
46+
public String getUsername() {
47+
return username;
48+
}
49+
50+
@Override
51+
public boolean isAccountNonExpired() {
52+
return isAccountNonExpired;
53+
}
54+
55+
@Override
56+
public boolean isAccountNonLocked() {
57+
return isAccountNonLocked;
58+
}
59+
60+
@Override
61+
public boolean isCredentialsNonExpired() {
62+
return isCredentialsNonExpired;
63+
}
64+
65+
@Override
66+
public boolean isEnabled() {
67+
return isEnabled;
68+
}
69+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.demo.auth;
2+
3+
import java.util.Optional;
4+
5+
public interface ApplicationUserDao {
6+
7+
Optional<ApplicationUser> selectApplicationUserByUsername(String username);
8+
9+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.demo.auth;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.beans.factory.annotation.Qualifier;
5+
import org.springframework.security.core.userdetails.UserDetails;
6+
import org.springframework.security.core.userdetails.UserDetailsService;
7+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
8+
import org.springframework.stereotype.Service;
9+
10+
@Service
11+
public class ApplicationUserService implements UserDetailsService {
12+
13+
private final ApplicationUserDao applicationUserDao;
14+
15+
@Autowired
16+
public ApplicationUserService(@Qualifier("fake") ApplicationUserDao applicationUserDao) {
17+
this.applicationUserDao = applicationUserDao;
18+
}
19+
20+
@Override
21+
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
22+
return applicationUserDao
23+
.selectApplicationUserByUsername(username)
24+
.orElseThrow(() ->
25+
new UsernameNotFoundException(String.format("Username %s not found", username))
26+
);
27+
}
28+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.example.demo.auth;
2+
3+
import com.google.common.collect.Lists;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.security.crypto.password.PasswordEncoder;
6+
import org.springframework.stereotype.Repository;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
import static com.example.demo.security.ApplicationUserRole.*;
12+
13+
@Repository("fake")
14+
public class FakeApplicationUserDaoService implements ApplicationUserDao {
15+
16+
private final PasswordEncoder passwordEncoder;
17+
18+
@Autowired
19+
public FakeApplicationUserDaoService(PasswordEncoder passwordEncoder) {
20+
this.passwordEncoder = passwordEncoder;
21+
}
22+
23+
@Override
24+
public Optional<ApplicationUser> selectApplicationUserByUsername(String username) {
25+
return getApplicationUsers()
26+
.stream()
27+
.filter(applicationUser -> username.equals(applicationUser.getUsername()))
28+
.findFirst();
29+
}
30+
31+
private List<ApplicationUser> getApplicationUsers() {
32+
List<ApplicationUser> applicationUsers = Lists.newArrayList(
33+
new ApplicationUser(
34+
"annasmith",
35+
passwordEncoder.encode("password"),
36+
STUDENT.getGrantedAuthorities(),
37+
true,
38+
true,
39+
true,
40+
true
41+
),
42+
new ApplicationUser(
43+
"linda",
44+
passwordEncoder.encode("password"),
45+
ADMIN.getGrantedAuthorities(),
46+
true,
47+
true,
48+
true,
49+
true
50+
),
51+
new ApplicationUser(
52+
"tom",
53+
passwordEncoder.encode("password"),
54+
ADMINTRAINEE.getGrantedAuthorities(),
55+
true,
56+
true,
57+
true,
58+
true
59+
)
60+
);
61+
62+
return applicationUsers;
63+
}
64+
65+
}
Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
package com.example.demo.security;
22

3+
import com.example.demo.auth.ApplicationUserService;
34
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.context.annotation.Bean;
56
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
8+
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
69
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
710
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
811
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
912
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
10-
import org.springframework.security.core.userdetails.User;
11-
import org.springframework.security.core.userdetails.UserDetails;
12-
import org.springframework.security.core.userdetails.UserDetailsService;
1313
import org.springframework.security.crypto.password.PasswordEncoder;
14-
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
15-
import org.springframework.security.web.authentication.rememberme.InMemoryTokenRepositoryImpl;
16-
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
17-
import org.springframework.security.web.util.matcher.AndRequestMatcher;
1814
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
1915

20-
import javax.servlet.http.Cookie;
21-
import java.net.CookieStore;
2216
import java.util.concurrent.TimeUnit;
2317

2418
import static com.example.demo.security.ApplicationUserRole.*;
@@ -30,10 +24,13 @@
3024
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
3125

3226
private final PasswordEncoder passwordEncoder;
27+
private final ApplicationUserService applicationUserService;
3328

3429
@Autowired
35-
public ApplicationSecurityConfig(PasswordEncoder passwordEncoder) {
30+
public ApplicationSecurityConfig(PasswordEncoder passwordEncoder,
31+
ApplicationUserService applicationUserService) {
3632
this.passwordEncoder = passwordEncoder;
33+
this.applicationUserService = applicationUserService;
3734
}
3835

3936
@Override
@@ -68,35 +65,16 @@ protected void configure(HttpSecurity http) throws Exception {
6865
}
6966

7067
@Override
71-
@Bean
72-
protected UserDetailsService userDetailsService() {
73-
UserDetails annaSmithUser = User.builder()
74-
.username("annasmith")
75-
.password(passwordEncoder.encode("password"))
76-
.authorities(STUDENT.getGrantedAuthorities())
77-
.build();
78-
79-
UserDetails lindaUser = User.builder()
80-
.username("linda")
81-
.password(passwordEncoder.encode("password123"))
82-
.authorities(ADMIN.getGrantedAuthorities())
83-
.build();
84-
85-
UserDetails tomUser = User.builder()
86-
.username("tom")
87-
.password(passwordEncoder.encode("password123"))
88-
.authorities(ADMINTRAINEE.getGrantedAuthorities())
89-
.build();
90-
91-
return new InMemoryUserDetailsManager(
92-
annaSmithUser,
93-
lindaUser,
94-
tomUser
95-
);
96-
68+
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
69+
auth.authenticationProvider(daoAuthenticationProvider());
9770
}
9871

99-
public static void main(String[] args) {
100-
System.out.println(TimeUnit.DAYS.toSeconds(1));
72+
@Bean
73+
public DaoAuthenticationProvider daoAuthenticationProvider() {
74+
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
75+
provider.setPasswordEncoder(passwordEncoder);
76+
provider.setUserDetailsService(applicationUserService);
77+
return provider;
10178
}
79+
10280
}

0 commit comments

Comments
 (0)