Несанкционированный запрос, 401, с использованием Spring, если я открываю модальное окно или отправляю запрос ajax

У меня проблема с Keycloak и Весенний ботинок ..

Я разработал веб-приложение с модальным запросом и запросом ajax, иногда, и я не знаю почему, я получаю status 401, если я нажимаю href, чтобы открыть модальное окно, или если я отправляю форму через ajax ...

Я не вижу никаких журналов ошибок на стороне сервера, но я проверил запрос и у меня есть WWW-Authenticate: Bearer realm = "Unknown". Я считаю это странным.

Это весь запрос:

1.       Request URL:
    MyUrl
2.       Request Method:
    GET
3.       Status Code:
    401 Unauthorized
4.       Remote Address:
    MyIp
5.       Referrer Policy:
    no-referrer-when-downgrade

Response Headers
1.       Cache-Control:
    no-cache, no-store, max-age=0, must-revalidate
2.       Connection:
    Keep-Alive
3.       Content-Language:
    it
4.       Content-Length:
    302
5.       Content-Type:
    text/html;charset=ISO-8859-1
6.       Date:
    Tue, 08 May 2018 07:32:59 GMT
7.       Expires:
    0
8.       Keep-Alive:
    timeout=5, max=99
9.       Pragma:
    no-cache
10.    Server:
    Apache/2.4.18 (Ubuntu)
11.    WWW-Authenticate:
    Bearer realm = "Unknown"
12.    X-Content-Type-Options:
    nosniff
13.    X-Frame-Options:
    DENY
14.    X-XSS-Protection:
    1; mode=block

Request Header
1.       Accept:
    text/html, */*; q=0.01
2.       Accept-Encoding:
    gzip, deflate
3.       Accept-Language:
    it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
4.       Connection:
    keep-alive
5.       Cookie:
    JSESSIONID=1F97669EEE8A347CAE145C8D25146512.Tomcat1; _ga=GA1.2.230482432.1486023475
6.       DNT:
    1
7.       Host:
    MyHost
8.       Referer:
    MyUrl
9.       User-Agent:
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
10.    X-Requested-With:
    XMLHttpRequest

Query String Parameters
.....

Это мой конфиг про keycloak и Spring:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
@KeycloakConfiguration
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {  

    @Autowired
    public KeycloakClientRequestFactory keycloakClientRequestFactory;

    public SecurityConfig() {
        SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);

        http
            .httpBasic()
            .disable();

        http
        .authorizeRequests()
            .anyRequest().hasAuthority("1086")
        .and()
        .logout()
            .logoutUrl("/logout")
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"))
            .permitAll()
            .logoutSuccessUrl(URL)
            .invalidateHttpSession(true);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(keycloakAuthenticationProvider());
    }

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public KeycloakRestTemplate keycloakRestTemplate() {
        return new KeycloakRestTemplate(keycloakClientRequestFactory);
    }

    @Bean
    public KeycloakConfigResolver keycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }


    @Bean
    public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(KeycloakAuthenticationProcessingFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(KeycloakPreAuthActionsFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean keycloakAuthenticatedActionsFilterBean(KeycloakAuthenticatedActionsFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean keycloakSecurityContextRequestFilterBean( KeycloakSecurityContextRequestFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }
    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
           .antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**", "/webjars/**");
    }

Я могу продолжить выполнение запроса, если я перезагружу страницу, а затем повторно нажму на href ... Но почему я должен перезагружать страницу? а почему иногда?

Я сталкиваюсь с аналогичной проблемой при использовании клиента ruby. "почему иногда?"

Mark Peterson 21.12.2020 20:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
635
0

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