java - 如何在 Java 8 中进行条件方法链接

标签 java spring-boot java-8 method-chaining

我有一个 spring 安全配置方法。我希望仅当条件匹配时才链接特定方法 antMatchers("/**/**").permitAll()。像这样的 {dev == true ? .antMatchers("/**/**").permitAll(): ()->{}} 。当然这不是一个有效的语法,最简洁的实现方式是什么。寻找最低编码。

@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();
    }

最佳答案

唯一的方法是将中间对象分配给一个变量。

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();

关于java - 如何在 Java 8 中进行条件方法链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152360/

相关文章:

java - 对本地类构造函数的方法引用

java - 分割字符串并实例化对象

java - 从 android 中的多个正在运行的应用程序检测声音级别

Java Integer.valueOf 为范围内的有效数字生成 NumberFormatException

java - 如何在android上制作滚动新闻横幅?

java - 如何在 Android 中设置默认布局

Lambda 在初始化之前访问封闭类的最终字段

java - main 中抛出异常,没有任何错误

java - 如何将 ApiParam 传递给另一个变量的 validator ?

spring-mvc - Spring 启动+JDBC+HSQLDB : How to Verify if Spring Boot is using a Connection Pool?