Spring загрузка и безопасность: доступ к защищенному URL из приложения для Android

Я разработал простую загрузку 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 / логин, я вижу, что пользователь аутентифицирован. Но тогда я не могу получить доступ к защищенным конечным точкам из приложения для Android. Ответ возвращает строку HTML (данные страницы входа).

Я тоже не вижу в ответе JSESSIONID.

В целом моя конфигурация работает нормально для веб-страниц, но не может заставить ее работать с другими API.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
109
1

Ответы 1

Это работает, когда вы используете форму входа на веб-страницу, потому что ваш пользовательский интерфейс и сервер находятся в одном домене. Когда Spring Security аутентифицирует пользователя, я считаю, что он добавляет идентификатор сеанса в заголовок cookie, чтобы он мог аутентифицировать каждый запрос после входа в систему. При обращении к вашему Spring API из другого домена, в данном случае вашего Android-приложения, оно больше не находится в том же домене, поэтому Spring Security не будет добавлять идентификатор сеанса в заголовок cookie. Итак, чтобы делать то, что вы хотите, я считаю, вам нужно написать свой собственный фильтр аутентификации, чтобы добавить файл cookie или заголовок к запросу. Вот ссылка, в которой используются веб-токены JSON для аутентификации API с помощью весенней загрузки. https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/

Другие вопросы по теме