Я разработал простую загрузку Spring и защиту Spring для входа в форму со следующей конфигурацией
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/registration").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
http.csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
}
Я также создал пользовательскую реализацию userDetailsService для получения пользователя.
Теперь, когда я вхожу с веб-страницы, используя форму входа, я могу успешно войти в систему и получить доступ к защищенным конечным точкам (я также вижу JSESSIONID в последующем ответе.
Но когда я пытаюсь войти через другой сервис (приложение для Android), используя httpPost с URL: http://localhost:9090/login,, я вижу, что пользователь аутентифицирован.
Но тогда я не могу получить доступ к защищенным конечным точкам из приложения для Android. Ответ возвращает строку HTML
(данные страницы входа).
Я также не вижу JSESSIONID
в ответе.
В целом, моя конфигурация работает нормально для веб-страниц, но не может заставить ее работать с другими API.