spring security loadUserByUsername имя пользователя пустое после входа в систему URL не используется в течение нескольких дней - PullRequest
0 голосов
/ 20 марта 2019
@Autowired
private BCryptPasswordEncoder passwordEncoder;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
            .userDetailsService(cUserDetailService)
            .passwordEncoder(passwordEncoder);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/user/**").authenticated()
            .and()
            .csrf().disable()
            .formLogin()
            .usernameParameter("username")
            .passwordParameter("password")
            .successHandler(successHandler)
            .failureHandler(failureHandler)
            .and()
            .logout()
            .logoutSuccessHandler(logoutSuccessHandler)
            .and()
            .exceptionHandling()
            .authenticationEntryPoint(authEntryPoint)
            .accessDeniedHandler(accessDeniedHandler)
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
            .maximumSessions(1)
            .maxSessionsPreventsLogin(false);
}


public class CUserDetailService implements UserDetailsService {

@Autowired
private UserDetailDataEntityRepository userDetailDataEntityRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

    log.info("username: " + username + ", " );
    log.info(username == null);

    Optional<UserDetailDataEntity> optional = userDetailDataEntityRepository.findByUsername(username);
    if (optional.isPresent()) {
        return optional.get();
    } else {
        throw new UsernameNotFoundException(username);
    }
}

} Я использовал этот конфиг для моей весенней безопасности, и сначала получил успешный вход в систему. но затем мы обнаруживаем, что если никто не получит доступ к серверу (даже к URL-адресу входа) в течение нескольких дней и снова выполнит вход, имя пользователя loadUserByUsername будет пустым и произойдет сбой входа в систему

К вашему сведению, я использовал redis для управления сеансом, добавив зависимость

        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

и запрос на вход в систему является формой запроса

...