SpringSecurity添加登录认证时的用户缓存

Spring Security 版本 5.7.3

SpringSecurity 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class AuthorizationServerSecurityConfiguration {

@Bean
@Order(2)
public SecurityFilterChain standardSecurityFilterChain(HttpSecurity http, UserCache userCache) throws Exception {
AuthenticationManagerBuilder authenticationBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
/*自定义 DaoAuthenticationProvider */
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsService());
provider.setPasswordEncoder(getDelegatingPasswordEncoder());
/*配置缓存*/
provider.setUserCache(userCache);
authenticationBuilder.authenticationProvider(provider);
http.authenticationManager(authenticationBuilder.build());
/* ***************** */
return http.build();
}

public UserDetailsService userDetailsService() {
// @formatter:off
UserDetails userDetails = User.builder().passwordEncoder((password) -> getDelegatingPasswordEncoder().encode(password))
.username("user")
.password("password")
.roles("USER")
.build();
// @formatter:on
return username -> {
if (userDetails.getUsername().equals(username)) {
return userDetails;
}
return null;
};
}

private static PasswordEncoder getDelegatingPasswordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

/**
* 默认缓存的实现
* 如需覆盖,请添加 @Primary
* @return UserCache
*/
@Bean
@Order(2)
public UserCache defaultUserCache() {
return new UserCache() {
@Override
public UserDetails getUserFromCache(String username) {
log.debug("");
return null;
}

@Override
public void putUserInCache(UserDetails user) {
log.debug("");
}

@Override
public void removeUserFromCache(String username) {
log.debug("");
}
};
}
}

本文地址: https://github.com/maxzhao-it/blog/post/6fb67330/