重构/优化Java代码以获得HostNameVerifier
我有一个下面的java类,它检查重构/优化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
实例
是否不是空的,是否与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;
}
}
DoesBoolean.parseBoolean()
enabled为空时抛出异常?@RanPaul如果enabled为空,则返回false
,而不是抛出异常。您可以编写一些测试来验证或直接查看源代码。另外,谢谢,denyAll
不应该返回false,它应该返回returnnew HostnameVerifier(){public boolean verify(String hostname,SSLSession session){DefaultHostnameVerifier=new DefaultHostnameVerifier();返回验证器。验证(主机名,会话);}
@RanPaul^ ^,您可以在了解问题域后重命名这些方法,但我认为您希望拒绝所有请求,因为我看到您直接使用DefaultHostnameVerifier
。