Получение перенаправления после входа в систему, но я на самом деле не вошел в Spring Security - PullRequest
0 голосов
/ 30 января 2020

Обновление: я пытался внедрить токен CSRF, и теперь, когда я пытаюсь войти в систему, меня всегда перенаправляют на страницу входа по умолчанию Spring localhost: 8080 / login, и когда я снова вхожу, он снова перенаправляет меня на URL успешного входа в систему ....

Это мой WebSecurityConfig

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    AccountDetailsService accountDetailsService;

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

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http
                .authorizeRequests()
                .antMatchers("/api/me").permitAll()
                .antMatchers(   HttpMethod.POST,"/api/addthing", "/api/addotherthing").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .defaultSuccessUrl("http://192.168.1.105:3000/api/adminpage", true)
        .and()
        .logout()
        .logoutSuccessUrl("http://192.168.1.105:3000/")
        .logoutUrl("/logout")
        .deleteCookies("JSESSIONID");

        http.csrf().disable();
    }

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

Вот мой AccountDetailsService

@Service("userDetailsService")
@Transactional
public class AccountDetailsService implements UserDetailsService {
    @Autowired
    AccountService accountService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Account account = accountService.findAccountByUsername(username);

        return new org.springframework.security.core.userdetails.User(
                account.getUsername(), account.getPassword(),
                true, true, true, true,
                accountService.getAuthorities(account)
        );
    }
}

Также AccountSrvice:

@Service
public class AccountService {
    @Autowired
    AccountRepository accountRepository;

    @Autowired
    PasswordEncoder passwordEncoder;

    public Account findAccountByUsername(String username){
        return accountRepository.findFirstByUsername(username);
    }

    public List<GrantedAuthority> getAuthorities(Account account){
        List<GrantedAuthority> roles = new ArrayList<>();
        String role = account.getRole();
        roles.add(new SimpleGrantedAuthority(role));
        return roles;
    }

    public void createNewAccount(String username, String password, String role) {
        Account account = new Account(username, passwordEncoder.encode(password), role);
        accountRepository.save(account);
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что после входа в систему я перенаправлен на сайт /api/adminpage/, что означает, что вход выполнен успешно, верно? Но когда я пытаюсь получить своего Принципала с помощью этого метода:

    @CrossOrigin
    @GetMapping("/api/me")
    public Principal getMe(Principal principal){
        return principal;
    }

Это просто дает мне пустой ответ, что означает, что я не вошел в систему .. Также, когда я пытаюсь сделать запрос POST для некоторых из URL в antMatches Я не могу ... Может кто-нибудь объяснить, что я здесь делаю не так?

1 Ответ

0 голосов
/ 30 января 2020

Ну, теперь весь этот день ушел на эту глупую мелочь, но я заставил ее работать, и я больше не рад этому

Исправление было добавить "proxy": "http://192.168.1.105:8080" в мой package.json в приложении React.

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