Почему SecurityContextHolder после перезагрузки страницы всегда возвращает anonymousUser? - PullRequest
0 голосов
/ 01 июля 2019

Я настраиваю веб-приложение со страницей входа. При входе в систему все выглядит хорошо, но после перезагрузки страницы Security Context Holder возвращает «anonymousUser», но аутентифицируется. Я сравнил контексты, и они разные. Как это исправить?

Я также пытался настроить контекст безопасности вручную, но он не работает.

Это контроллер

@RestController
public class LoginController {


@Autowired
UserRepository userRepository;

@PostMapping(path = "/login")
public ResponseEntity login(Principal principal){

    User byLogin = userRepository.findByLogin(principal.getName());
    if(byLogin != null){
        UserDTO userDTO = new UserDTO(byLogin);
        System.out.println(SecurityContextHolder.getContext().getAuthentication().getName());
        System.out.println(SecurityContextHolder.getContext().getAuthentication().isAuthenticated());
        return ResponseEntity.status(200).body(userDTO);
    }
    else{
        return ResponseEntity.status(401).build();
    }
}

@GetMapping(path = "/checkAuthentication")
@ResponseBody
public boolean checkAuthentication(){
    System.out.println(SecurityContextHolder.getContext().getAuthentication().isAuthenticated());
    System.out.println(SecurityContextHolder.getContext().getAuthentication().getName());
        if(SecurityContextHolder.getContext().getAuthentication().isAuthenticated()){
            if(!SecurityContextHolder.getContext().getAuthentication().getName().equals("anonymousUser")){
                return SecurityContextHolder.getContext().getAuthentication().isAuthenticated();
            }
        }
    return false;
}

Это Конфигурация

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


@Autowired
UserDetailsImpl userDetails;

@Bean
public DaoAuthenticationProvider daoAuthenticationProvider(){

    DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
    authenticationProvider.setUserDetailsService(userDetails);
    authenticationProvider.setPasswordEncoder(passwordEncoder());

    return authenticationProvider;
}

@Override
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder){
    authenticationManagerBuilder.authenticationProvider(daoAuthenticationProvider());
}

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {

    httpSecurity.addFilterBefore(new CorsConfiguration(), ChannelProcessingFilter.class);

    httpSecurity
            .authorizeRequests()
            .antMatchers("/**")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .logout()
            .logoutUrl("logout")
            .deleteCookies("JSESSIONID")
            .and()
            .httpBasic()
            .and()
            .csrf()
            .disable();

}

@Bean
public PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

}

Это реализация UserDetails

@Service
public class UserDetailsImpl implements UserDetailsService {

@Autowired
UserRepository userRepository;

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

    User user = userRepository.findByLogin(login);
    if(user != null){
        UserService userService = new UserService();
        userService.setUser(user);

        return userService;
    }
    else {
        throw new UsernameNotFoundException(login);
    }
  }
}

Это класс UserService

public class UserService implements UserDetails {

User user;

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return null;
}

@Override
public String getPassword() {
    return user.getPassword();
}

@Override
public String getUsername() {
    return user.getLogin();
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}
}

и сущность пользователя

@Entity
public class User {

@Id
int id;
@Column(name = "login")
String login;
@Column(name = "password")
String password;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getLogin() {

    return login;
}

public void setLogin(String login) {

    this.login = login;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {

    this.password = password;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...