mirror of
https://gitee.com/dromara/MaxKey.git
synced 2025-12-07 01:18:27 +08:00
HttpEncoder StreamUtils Preconditions
This commit is contained in:
parent
76f089a33e
commit
6caa74b0f9
@ -35,16 +35,17 @@ public abstract class HttpEncoder {
|
|||||||
ENCODING_RULES = Collections.unmodifiableMap(rules);
|
ENCODING_RULES = Collections.unmodifiableMap(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String encode(String plain) throws Exception {
|
public static String encode(String plain) {
|
||||||
String encoded;
|
String encoded = null;
|
||||||
try {
|
try {
|
||||||
encoded = URLEncoder.encode(plain, CHARSET);
|
encoded = URLEncoder.encode(plain, CHARSET);
|
||||||
|
for (Map.Entry<String, String> rule : ENCODING_RULES.entrySet()) {
|
||||||
|
encoded = applyRule(encoded, rule.getKey(), rule.getValue());
|
||||||
|
}
|
||||||
} catch (UnsupportedEncodingException uee) {
|
} catch (UnsupportedEncodingException uee) {
|
||||||
throw new Exception("Charset not found while encoding string: " + CHARSET, uee);
|
uee.printStackTrace();
|
||||||
}
|
|
||||||
for (Map.Entry<String, String> rule : ENCODING_RULES.entrySet()) {
|
|
||||||
encoded = applyRule(encoded, rule.getKey(), rule.getValue());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return encoded;
|
return encoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.maxkey.util;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.maxkey.client.oauth.model.OAuthConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utils for checking preconditions and invariants
|
||||||
|
*/
|
||||||
|
public abstract class Preconditions {
|
||||||
|
|
||||||
|
private static final String DEFAULT_MESSAGE = "Received an invalid parameter";
|
||||||
|
|
||||||
|
// scheme = alpha *( alpha | digit | "+" | "-" | "." )
|
||||||
|
private static final String URL_REGEXP = "^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that an object is not null.
|
||||||
|
*
|
||||||
|
* @param object any object
|
||||||
|
* @param errorMsg error message
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the object is null
|
||||||
|
*/
|
||||||
|
public static void checkNotNull(Object object, String errorMsg) {
|
||||||
|
check(object != null, errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a string is not null or empty
|
||||||
|
*
|
||||||
|
* @param string any string
|
||||||
|
* @param errorMsg error message
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the string is null or empty
|
||||||
|
*/
|
||||||
|
public static void checkEmptyString(String string, String errorMsg) {
|
||||||
|
check(string != null && !string.trim().isEmpty(), errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a URL is valid
|
||||||
|
*
|
||||||
|
* @param url any string
|
||||||
|
* @param errorMsg error message
|
||||||
|
*/
|
||||||
|
public static void checkValidUrl(String url, String errorMsg) {
|
||||||
|
checkEmptyString(url, errorMsg);
|
||||||
|
check(isUrl(url), errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a URL is a valid OAuth callback
|
||||||
|
*
|
||||||
|
* @param url any string
|
||||||
|
* @param errorMsg error message
|
||||||
|
*/
|
||||||
|
public static void checkValidOAuthCallback(String url, String errorMsg) {
|
||||||
|
checkEmptyString(url, errorMsg);
|
||||||
|
if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) {
|
||||||
|
check(isUrl(url), errorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isUrl(String url) {
|
||||||
|
return Pattern.compile(URL_REGEXP).matcher(url).matches();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void check(boolean requirements, String error) {
|
||||||
|
if (!requirements) {
|
||||||
|
throw new IllegalArgumentException(error == null || error.trim().length() <= 0 ? DEFAULT_MESSAGE : error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
65
maxkey-common/src/main/java/org/maxkey/util/StreamUtils.java
Normal file
65
maxkey-common/src/main/java/org/maxkey/util/StreamUtils.java
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.maxkey.util;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utils to deal with Streams.
|
||||||
|
*/
|
||||||
|
public abstract class StreamUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the stream contents as an UTF-8 encoded string
|
||||||
|
*
|
||||||
|
* @param is input stream
|
||||||
|
* @return string contents
|
||||||
|
* @throws java.io.IOException in any. SocketTimeout in example
|
||||||
|
*/
|
||||||
|
public static String getStreamContents(InputStream is) throws IOException {
|
||||||
|
Preconditions.checkNotNull(is, "Cannot get String from a null object");
|
||||||
|
final char[] buffer = new char[0x10000];
|
||||||
|
final StringBuilder out = new StringBuilder();
|
||||||
|
try (Reader in = new InputStreamReader(is, "UTF-8")) {
|
||||||
|
int read;
|
||||||
|
do {
|
||||||
|
read = in.read(buffer, 0, buffer.length);
|
||||||
|
if (read > 0) {
|
||||||
|
out.append(buffer, 0, read);
|
||||||
|
}
|
||||||
|
} while (read >= 0);
|
||||||
|
}
|
||||||
|
return out.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return String content from a gzip stream
|
||||||
|
*
|
||||||
|
* @param is input stream
|
||||||
|
* @return string contents
|
||||||
|
* @throws java.io.IOException in any. SocketTimeout in example
|
||||||
|
*/
|
||||||
|
public static String getGzipStreamContents(InputStream is) throws IOException {
|
||||||
|
Preconditions.checkNotNull(is, "Cannot get String from a null object");
|
||||||
|
final GZIPInputStream gis = new GZIPInputStream(is);
|
||||||
|
return getStreamContents(gis);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -54,9 +54,9 @@ public class MaxKeyApplication extends SpringBootServletInitializer {
|
|||||||
} catch (ServletException e) {
|
} catch (ServletException e) {
|
||||||
_logger.error("ServletException", e);
|
_logger.error("ServletException", e);
|
||||||
}
|
}
|
||||||
_logger.info("MaxKey at " + new DateTime());
|
_logger.info("MaxKey at {}" , new DateTime());
|
||||||
_logger.info("MaxKey Server Port "
|
_logger.info("MaxKey Server Port {}"
|
||||||
+ applicationContext.getBean(ApplicationConfig.class).getPort());
|
,applicationContext.getBean(ApplicationConfig.class).getPort());
|
||||||
_logger.info("MaxKey started.");
|
_logger.info("MaxKey started.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -61,16 +61,19 @@ public class MaxKeyMgtApplication extends SpringBootServletInitializer {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
_logger.info("Start MaxKeyMgtApplication ...");
|
_logger.info("Start MaxKeyMgtApplication ...");
|
||||||
|
|
||||||
ConfigurableApplicationContext applicationContext =SpringApplication.run(MaxKeyMgtApplication.class, args);
|
ConfigurableApplicationContext applicationContext =
|
||||||
InitializeContext initWebContext=new InitializeContext(applicationContext);
|
SpringApplication.run(MaxKeyMgtApplication.class, args);
|
||||||
|
InitializeContext initWebContext =
|
||||||
|
new InitializeContext(applicationContext);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
initWebContext.init(null);
|
initWebContext.init(null);
|
||||||
} catch (ServletException e) {
|
} catch (ServletException e) {
|
||||||
_logger.error("Exception ",e);
|
_logger.error("Exception ",e);
|
||||||
}
|
}
|
||||||
_logger.info("MaxKeyMgt at "+new DateTime());
|
_logger.info("MaxKeyMgt at {}" , new DateTime());
|
||||||
_logger.info("MaxKeyMgt Server Port "+applicationContext.getBean(ApplicationConfig.class).getPort());
|
_logger.info("MaxKeyMgt Server Port {}"
|
||||||
|
,applicationContext.getBean(ApplicationConfig.class).getPort());
|
||||||
_logger.info("MaxKeyMgt started.");
|
_logger.info("MaxKeyMgt started.");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user