Блокировка загрузки Spring без конечных точек RestController - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть приложение, которое отображает множество конечных точек, которых я не ожидал.Например, localhost: 8080 / app / возвращает список URL, который, помимо прочего, предоставляет информацию, относящуюся к спящим объектам.

Я НЕ хочу, чтобы базовая аутентификация была включена, поскольку у меня настроена собственная аутентификация.Но если URL не тот, который представлен RestController, который я написал, то я хочу, чтобы он был на моей существующей запрещенной странице.

Вот моя текущая конфигурация, но она не предотвращает нежелательные конечные точки:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/**").antMatchers("/v2/**").antMatchers("/webjars/**").antMatchers("/swagger-resources/**")
       .antMatchers("/swagger-ui.html");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.httpBasic().disable();
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .csrf().disable();

    http.authenticationProvider(new CustomAuthenticationProvider()).authorizeRequests().anyRequest().authenticated()
        .antMatchers("/v2/**").permitAll().antMatchers("/webjars/**").permitAll().antMatchers("/swagger-resources/**").permitAll()
        .antMatchers("/swagger-ui.html").permitAll()
        .antMatchers("/health").permitAll();
    http.rememberMe().rememberMeServices(rememberMeService).useSecureCookie(useSecureCookie);

    //Show 403 on denied access
    http.exceptionHandling().authenticationEntryPoint(new Forbidden());
}

Таким образом, в этом случае localhost: 8080 / app / api / SearchControler / {var} должен работать, а localhost: 8080 / app / должен перейти в мою запрещенную точку входа.Вместо этого localhost: 8080 / app / переходит на весеннюю страницу имени пользователя и пароля.

Во-первых, я не знаю, почему эти конечные точки даже отображаются, когда для них нет RestController, и, во-вторых, почему происходит перенаправление настраница 403 настолько сложна.

Я не уверен, какой конфигурации мне не хватает.

* РЕДАКТИРОВАТЬ *

Я также пытался:

http.formLogin().and().httpBasic().disabled();

, а также:

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})

, и ничто не мешает пружине захватить власть и сделать то, что ей хочется.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Я думаю, что есть еще конфигурация, которую вы не показывали как, но в любом случае:

@Override
public void configure(WebSecurity web) throws Exception {
    //this is only for ignoring static resources in your app, sth that is never changed (you can cash it) and public (available for any user on the internet (ex. /js /css - sth else static img etc)
    web.ignoring().antMatchers("/webjars/**").antMatchers("/swagger-resources/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    //super.configure(http); this call the default configuration, if you implement this method you shouldn't call the default one
    http.httpBasic().disable();
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .csrf().disable();

    http.authenticationProvider(new CustomAuthenticationProvider())
        .authorizeRequests() // the order is matter here, if antMatchers() will match the request the others after him will not be checked, anyRequest() will match any request, so it should be at the end 
      //.permitAll().antMatchers("/webjars/**").permitAll().antMatchers("/swagger-resources/**").permitAll() - there is no need to duplicate what is in web.ignoring() - such requests will not reach this point 

        .antMatchers("/swagger-ui.html").permitAll()
        .antMatchers("/health").permitAll()
        .anyRequest().authenticated()
    http.rememberMe().rememberMeServices(rememberMeService).useSecureCookie(useSecureCookie);

    //Show 403 on denied access
    http.exceptionHandling().authenticationEntryPoint(new Forbidden());
}
0 голосов
/ 20 декабря 2018

Эта проблема полностью связана с переходными зависимостями.После удаления некоторых зависимостей и добавления исключений к другим основная проблема была решена.

0 голосов
/ 11 декабря 2018

Попробуйте еще раз после удаления super.configure(http); в вашем методе configure(HttpSecurity http).

Документация

Переопределите этот метод для настройки {@link HttpSecurity}.Обычно подклассы * не должны вызывать этот метод, вызывая super, поскольку это может переопределить их * конфигурацию.Конфигурация по умолчанию: http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();

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