Spring Boot Security Отключить веб-безопасность для определенного URL - PullRequest
0 голосов
/ 13 июня 2018

Я использую Spring security для приложения Spring Boot, содержащего набор служб Restful.Я включил веб-безопасность с базовой аутентификацией.Я хотел бы включить базовую аутентификацию за исключением определенного URL-адреса API, заканчивающегося определенным шаблоном.(Например, API проверки работоспособности, например: / application / _healthcheck)

Код выглядит следующим образом:

@Configuration
@EnableWebSecurity
public class ApplicationWebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthenticationEntryPoint authEntryPoint;

    @Value("${application.security.authentication.username}")
    private String username;

    @Value("${application.security.authentication.password}")
    private String password;

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic()
                .authenticationEntryPoint(authEntryPoint);
    }

    @Autowired
    public void configureGlobal(final AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser(username).password(password).roles("USER");
    }

    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring().antMatchers("*/_healthcheck");
    }
}

Однако всякий раз, когда я вызываю URL-адрес ... / application / _healthcheck, браузервсегда запрашивает ввод учетных данных.

Альтернативно, я даже пытался игнорировать этот путь из приложения application.properties Spring boot (удалил метод configure с помощью web.ignoring (). antMatchers ("* / _ healthcheck")), но все жене удается избавиться от аутентификации для этой конечной точки

security.ignored=/_healthcheck,*/_healthcheck

Ответы [ 3 ]

0 голосов
/ 18 марта 2019
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/application/_healthcheck");
}

Разница в приведенном выше примере и вашем коде заключается в использовании web над http.Попробуйте с помощью Интернета и посмотрите, работает ли он {практически так и должно быть :)}.

0 голосов
/ 18 марта 2019

Вы можете создать список разрешений и использовать его для отключения защиты.

List<String> permitAllEndpointList = Arrays.asList(
            AUTHENTICATION_URL,
            REFRESH_TOKEN_URL,
            EXTERNAL_AUTH_URL,
            "/swagger-resources",
            "/swagger-resources/**",
            "/swagger-ui.html"
);

, а затем добавить этот оператор в свой объект HttpSecurity

.and()
.authorizeRequests()
.antMatchers(permitAllEndpointList.toArray(new String[permitAllEndpointList.size()]))
.permitAll()

Это решит вашу проблему.

0 голосов
/ 13 июня 2018

Попробуй это.Это пропустит часть аутентификации для URL работоспособности.

@Override
protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("*/_healthcheck").permitAll() // added this line
                .anyRequest().authenticated()
                .and().httpBasic()
                .authenticationEntryPoint(authEntryPoint);
}
...