restful中数据权限加密方式有很多种,特别是针对于request json的方式加密,这里详细介绍了SOA中针对于get、post数据加密方式,保证数据传输中的安全性:
-
@Component
(
"dataSignInterceptor"
)
-
public
class
DataSignInterceptor
implements
MethodInterceptor {
-
@Autowired
-
private
SoaServiceConfigService soaServiceConfigService;
-
-
@Autowired
-
private
SoaAppSecretService soaAppSecretService;
-
-
@Autowired
-
private
SoaServiceApplyService soaServiceApplyService;
-
-
public
Object invoke(MethodInvocation mi)
throws
Throwable {
-
-
-
List<SoaServiceConfig> soaServiceConfigList = soaServiceConfigService.findNoSwitchList();
-
if
(soaServiceConfigList !=
null
){
-
-
}
-
Object[] ars = mi.getArguments();
-
-
-
if
(mi.getMethod().isAnnotationPresent(DataSign.
class
)) {
-
-
HttpServletRequest request =
null
;
-
JSONObject jsonBody =
null
;
-
Map<String, String> reqGetParamMap =
null
;
-
Map<String, String> reqPostParamMap =
null
;
-
Map<String, String> resultParamMap =
new
HashMap<String, String>();
-
for
(Object obj : ars) {
-
if
(obj
instanceof
HttpServletRequest) {
-
request = (HttpServletRequest) obj;
-
reqGetParamMap = (Map<String, String>) request.getParameterMap();
-
Set keSet = reqGetParamMap.entrySet();
-
for
(Iterator itr = keSet.iterator(); itr.hasNext();) {
-
Map.Entry me = (Map.Entry) itr.next();
-
String key = me.getKey().toString();
-
Object ov = me.getValue();
-
String[] value =
new
String[
1
];
-
if
(ov
instanceof
String[]){
-
value=(String[])ov;
-
}
else
{
-
value[
0
]=ov.toString();
-
}
-
-
resultParamMap.put(key, value[
0
]);
-
}
-
}
else
if
(obj
instanceof
JSONObject) {
-
jsonBody = (JSONObject) obj;
-
ObjectMapper objMap =
new
ObjectMapper();
-
reqPostParamMap = objMap.readValue(jsonBody.toString(), Map.
class
);
-
resultParamMap = reqPostParamMap;
-
}
-
}
-
-
String serviceUrl = request.getServletPath();
-
if
(StringUtils.isNotEmpty(serviceUrl)){
-
serviceUrl = serviceUrl.substring(serviceUrl.indexOf(
"/"
,
2
));
-
}
-
-
-
-
if
(soaServiceConfigList !=
null
){
-
for
(SoaServiceConfig soaServiceConfig : soaServiceConfigList){
-
if
(serviceUrl.equals(soaServiceConfig.getServiceUrl())){
-
return
mi.proceed();
-
}
-
}
-
}
-
-
String reqSign = resultParamMap.get(
"sign"
);
-
-
if
(StringUtils.isEmpty(reqSign)) {
-
return
new
ResponseVO(DataSignEnum.SIGN_NOT_NULL.getCode(), DataSignEnum.SIGN_NOT_NULL.getMessage(),
-
null
);
-
}
-
-
String appname = resultParamMap.get(
"appname"
);
-
-
if
(StringUtils.isEmpty(appname)) {
-
return
new
ResponseVO(DataSignEnum.APPNAME_NOT_NULL.getCode(),
-
DataSignEnum.APPNAME_NOT_NULL.getMessage(),
null
);
-
}
-
-
SoaServiceApply soaServiceApply = soaServiceApplyService.getServiceApplyByAppname(serviceUrl, appname);
-
if
(
null
== soaServiceApply){
-
return
new
ResponseVO(DataSignEnum.APPNAME_NOT_APPLY.getCode(),
-
DataSignEnum.APPNAME_NOT_APPLY.getMessage(),
null
);
-
}
-
-
SoaAppSecret soaAppSecret = soaAppSecretService.findAppSecretByAppName(appname);
-
if
(
null
== soaAppSecret){
-
return
new
ResponseVO(DataSignEnum.APPNAME_NOT_EXISTS.getCode(),
-
DataSignEnum.APPNAME_NOT_EXISTS.getMessage(),
null
);
-
-
}
-
-
resultParamMap.remove(
"sign"
);
-
-
resultParamMap.put(
"token"
, soaAppSecret.getToken());
-
String sign = MD5Utils.paramString(resultParamMap);
-
-
-
if
(!StringUtils.equals(sign, reqSign)) {
-
return
new
ResponseVO(DataSignEnum.SIGN_NOT_MATCH.getCode(), DataSignEnum.SIGN_NOT_MATCH.getMessage(),
-
null
);
-
}
-
}
-
-
return
mi.proceed();
-
}
-
-
-
-
-
-
-
public
enum
DataSignEnum {
-
SIGN_NOT_NULL(
2001
,
"签名不能为空."
),
-
SIGN_NOT_MATCH(
2002
,
"签名不匹配,传递的数据被篡改过."
),
-
APPNAME_NOT_NULL(
2003
,
"应用名不能为空."
),
-
APPNAME_NOT_EXISTS(
2004
,
"应用名不存在."
),
-
APPNAME_NOT_APPLY(
2005
,
"当前应用没有权限访问此服务,请联系管理员进行服务申请."
);
-
-
-
private
int
code;
-
private
String message;
-
-
-
private
DataSignEnum(
int
code, String message) {
-
this
.code = code;
-
this
.message = message;
-
}
-
-
public
int
getCode() {
-
return
code;
-
}
-
-
public
void
setCode(
int
code) {
-
this
.code = code;
-
}
-
-
public
String getMessage() {
-
return
message;
-
}
-
-
public
void
setMessage(String message) {
-
this
.message = message;
-
}
-
}
-
-
}
到此结束!!(企业架构源码可以加求球:叁五三陆二肆柒二伍玖)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69984951/viewspace-2733345/
,如需转载,请注明出处,否则将追究法律责任。