Как сделать условный метод сцепления в Java 8 - PullRequest
0 голосов
/ 11 января 2019

У меня есть метод настройки безопасности Spring. Я хочу, чтобы конкретный метод был связан antMatchers("/**/**").permitAll(), только если условие соответствует. как то так {dev == true ? .antMatchers("/**/**").permitAll(): ()->{}}. Конечно, это недопустимый синтаксис, каков способ MOST CONSISE . Ищу минимальное кодирование.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .cors().disable()
            .authorizeRequests()
            {dev == true ? .antMatchers("/**/**").permitAll(): ()->{}} //dev only. NEVER enable on prod 
                .antMatchers("/", "/signup", "/static/**", "/api/sigin", "/api/signup", "**/favicon.ico").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/")
                .loginProcessingUrl("/api/signin")
                .successHandler(authSuccessHandler())
                .failureHandler(authFailureHandler())
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Если все, что вы хотите сделать, это разрешить доступ к определенному пути на основе логического значения, вы можете попробовать это:

 http
        .csrf().disable()
        .cors().disable()
        .authorizeRequests()
        .antMatchers(dev ? "/**/**":"invalid-path").permitAll()
            .antMatchers("/", "/signup", "/static/**", "/api/sigin", "/api/signup", "**/favicon.ico").permitAll()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/")
            .loginProcessingUrl("/api/signin")
            .successHandler(authSuccessHandler())
            .failureHandler(authFailureHandler())
            .permitAll()
            .and()
        .logout()
            .permitAll();
0 голосов
/ 11 января 2019

Единственный способ - присвоить промежуточный объект переменной.

WhateverAuthorizeRequestsReturns partial = http
    .csrf().disable()
    .cors().disable()
    .authorizeRequests();

if (dev) // note: you don't need 'dev == true' like you had
{
    partial.someOptionalThing();
    // if the type is immutable then you need to reassign e.g.:
    // partial = partial.someOptionalThing()
}

partial.something()
    .somethingElse()
    .andTheRest();
...