重构/优化Java代码以获得HostNameVerifier

重构/优化Java代码以获得HostNameVerifier,java,optimization,java-8,refactoring,Java,Optimization,Java 8,Refactoring,我有一个下面的java类,它检查实例是否不是空的,是否与dev/qa/stg/staging/prod匹配,并且主机名验证是否为真,然后getHostnameVerifierForInstance返回一个定制的主机名验证程序 public class SSLConfig { private static final String PROD_INSTANCE = "Prod"; private static final String STG_INSTANCE1 = "Staging

我有一个下面的java类,它检查
实例
是否不是空的,是否与
dev
/
qa
/
stg
/
staging
/
prod
匹配,并且
主机名验证
是否为
,然后
getHostnameVerifierForInstance
返回一个定制的
主机名验证程序

public class SSLConfig {
    private static final String PROD_INSTANCE = "Prod";
    private static final String STG_INSTANCE1 = "Staging";
    private static final String STG_INSTANCE2 = "Stg";
    private static final String QA_INSTANCE = "QA";
    private static final String DEV_INSTANCE = "DEV";

     private static HostnameVerifier getHostnameVerifierForInstance(String instance, String hostnameVerification) {
        LOGGER.info("HostnameVerifier For Instance = {}, hostnameVerification = {}",instance,hostnameVerification);
        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        if(StringUtils.isNotBlank(instance)) {
            if ((instance.trim().toLowerCase().startsWith(PROD_INSTANCE.toLowerCase()) || instance.trim().toLowerCase().startsWith(STG_INSTANCE1.toLowerCase()) || instance.trim().toLowerCase().startsWith(STG_INSTANCE2.toLowerCase()) || instance.trim().toLowerCase().startsWith(QA_INSTANCE.toLowerCase()) || instance.trim().toLowerCase().startsWith(DEV_INSTANCE.toLowerCase())) && StringUtils.isNotBlank(hostnameVerification) && hostnameVerification.trim().toLowerCase().equalsIgnoreCase("true")) {
                hostnameVerifier = new HostnameVerifier() {
                    public boolean verify(String hostname, SSLSession session) {
                        DefaultHostnameVerifier verifier = new DefaultHostnameVerifier();
                        return verifier.verify(hostname, session);
                    }
                };
            }
        }
        return hostnameVerifier;
    }
}

我想知道这个方法能否被重构/改进为更好的版本?

重构后的代码应该是这样的:

public class SSLConfig {
    private static final String PROD_INSTANCE = "Prod";
    private static final String STG_INSTANCE1 = "Staging";
    private static final String STG_INSTANCE2 = "Stg";
    private static final String QA_INSTANCE = "QA";
    private static final String DEV_INSTANCE = "DEV";

    private static HostnameVerifier getHostnameVerifierForInstance(String instance,
                                                                   String enabled){
        return Boolean.parseBoolean(enabled)&&reject(instance) ? denyAll() 
                : permitAll();
    }

    private static boolean reject(String instance) {
        return rejections().anyMatch(instance.trim().toLowerCase()::startsWith);
    }

    private static Stream<String> rejections() {
        return Stream.of(PROD_INSTANCE, STG_INSTANCE1,
                STG_INSTANCE2, QA_INSTANCE, DEV_INSTANCE).map(String::toLowerCase);
    }

    private static HostnameVerifier denyAll() {
        return (hostname, session) -> false;
    }

    private static HostnameVerifier permitAll() {
        return (hostname, session) -> true;
    }
}
公共类SSLConfig{
私有静态最终字符串PROD\u INSTANCE=“PROD”;
私有静态最终字符串STG_INSTANCE1=“Staging”;
私有静态最终字符串STG_INSTANCE2=“STG”;
私有静态最终字符串QA_INSTANCE=“QA”;
私有静态最终字符串DEV_INSTANCE=“DEV”;
私有静态HostnameVerifier getHostnameVerifierForInstance(字符串实例,
字符串(已启用){
返回Boolean.parseBoolean(已启用)&&reject(实例)?denyAll()
:permitAll();
}
私有静态布尔拒绝(字符串实例){
返回拒绝().anyMatch(instance.trim().toLowerCase()::startWith);
}
私有静态流拒绝(){
返回流。of(PROD_实例、STG_实例1、,
STG_实例2,QA_实例,DEV_实例).map(字符串::toLowerCase);
}
私有静态主机名验证程序denyAll(){
返回(主机名,会话)->false;
}
专用静态HostnameVerifier permitAll()的{
返回(主机名、会话)->true;
}
}

Does
Boolean.parseBoolean()
enabled为空时抛出异常?@RanPaul如果enabled为空,则返回
false
,而不是抛出异常。您可以编写一些测试来验证或直接查看源代码。另外,谢谢,
denyAll
不应该返回false,它应该返回
returnnew HostnameVerifier(){public boolean verify(String hostname,SSLSession session){DefaultHostnameVerifier=new DefaultHostnameVerifier();返回验证器。验证(主机名,会话);}
@RanPaul^ ^,您可以在了解问题域后重命名这些方法,但我认为您希望拒绝所有请求,因为我看到您直接使用
DefaultHostnameVerifier