67 lines
2.7 KiB
Java
67 lines
2.7 KiB
Java
/**
|
|
* Copyright (c) 2018-2028, DreamLu 卢春梦 (qq596392912@gmail.com).
|
|
* <p>
|
|
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* <p>
|
|
* http://www.gnu.org/licenses/lgpl.html
|
|
* <p>
|
|
* 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.springblade.core.api.crypto.core;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springblade.core.api.crypto.annotation.decrypt.ApiDecrypt;
|
|
import org.springblade.core.api.crypto.bean.CryptoInfoBean;
|
|
import org.springblade.core.api.crypto.config.ApiCryptoProperties;
|
|
import org.springblade.core.api.crypto.util.ApiCryptoUtil;
|
|
import org.springblade.core.tool.jackson.JsonUtil;
|
|
import org.springblade.core.tool.utils.Charsets;
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
import org.springframework.core.MethodParameter;
|
|
import org.springframework.core.annotation.AnnotatedElementUtils;
|
|
import org.springframework.lang.Nullable;
|
|
import org.springframework.web.bind.support.WebDataBinderFactory;
|
|
import org.springframework.web.context.request.NativeWebRequest;
|
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
|
|
|
import java.lang.reflect.Parameter;
|
|
|
|
/**
|
|
* param 参数 解析
|
|
*
|
|
* @author L.cm
|
|
*/
|
|
@RequiredArgsConstructor
|
|
public class ApiDecryptParamResolver implements HandlerMethodArgumentResolver {
|
|
private final ApiCryptoProperties properties;
|
|
|
|
@Override
|
|
public boolean supportsParameter(MethodParameter parameter) {
|
|
return AnnotatedElementUtils.hasAnnotation(parameter.getParameter(), ApiDecrypt.class);
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer,
|
|
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
|
|
Parameter parameter = methodParameter.getParameter();
|
|
ApiDecrypt apiDecrypt = AnnotatedElementUtils.getMergedAnnotation(parameter, ApiDecrypt.class);
|
|
String text = webRequest.getParameter(properties.getParamName());
|
|
if (StringUtil.isBlank(text)) {
|
|
return null;
|
|
}
|
|
CryptoInfoBean infoBean = new CryptoInfoBean(apiDecrypt.value(), apiDecrypt.secretKey());
|
|
byte[] textBytes = text.getBytes(Charsets.UTF_8);
|
|
byte[] decryptData = ApiCryptoUtil.decryptData(properties, textBytes, infoBean);
|
|
return JsonUtil.readValue(decryptData, parameter.getType());
|
|
}
|
|
}
|