java http签名认证_Web拦截器实现http访问方法和数字签名认证

packagecom.wanda.crs.filter;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.lang.StringUtils;importorg.slf4j.Logger;importcom.alibaba.fastjson.JSON;importcom.wanda.crs.standard.model.ClientInfoModel;importcom.wanda.crs.utils.Contants;importcom.wanda.crs.utils.HttpClientUtils;importcom.wanda.crs.utils.MyRequestUtil;importcom.wanda.crs.utils.PropConfigUtil;importcom.wanda.crs.utils.RenderHelper;importcom.wanda.crs.utils.SignCheck;importcom.wanda.crs.utils.StandardResult;importcom.wanda.crs.utils.StringUtil;importcom.wanda.crs.utils.httpclient.HttpRequest;public class HttpRequestSignInputCheck implementsFilter{private Logger _log =org.slf4j.LoggerFactory.getLogger(getClass());private static final String requestClientAppId = "clientId";/*** 是否是开发模式*/

private static final boolean devMode = true;private String excludedPages; //不需要拦截的url

privateString[] excludedPagesArray;private static String api_url="";

@Overridepublic voiddestroy() {

System.gc();

}

@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throwsIOException, ServletException {

HttpServletRequest request=(HttpServletRequest)req;

HttpServletResponse response=(HttpServletResponse)resp;boolean isExcludedPage = false;if(excludedPagesArray!=null&&excludedPagesArray.length>0){for (String page : excludedPagesArray) { //不需要拦截的url

if(((HttpServletRequest) request).getServletPath().equals(page)){

isExcludedPage= true;break;

}else if(page.contains("*")&&((HttpServletRequest) request).getServletPath().startsWith("/"+page.split("/")[1])){

isExcludedPage= true;break;

}

}

}if (isExcludedPage) {//在过滤url之外

chain.doFilter(request, response);

}else{if(!HttpRequest.METHOD_GET.equalsIgnoreCase(request.getMethod()) &&

!HttpRequest.METHOD_POST.equalsIgnoreCase(request.getMethod())){

StandardResult resultBase= newStandardResult();

StringBuilder errmsg= newStringBuilder();

errmsg.append("禁止[" + request.getMethod() + "]方法访问;允许的方法为[");

errmsg.append(HttpRequest.METHOD_GET+ "]和[");

errmsg.append(HttpRequest.METHOD_POST+ "]");

resultBase.setStatus(StandardResult.FAIL);

resultBase.setMessage(String.valueOf(errmsg));

RenderHelper.render(resultBase, response);return;

}

Map values = new HashMap();if(HttpRequest.METHOD_GET.equals(request.getMethod())) {

values= MyRequestUtil.getParamsMap(request, "UTF-8");

}else{

values= MyRequestUtil.getParamsMap(request,null);

}

String clientId=values.get(requestClientAppId);

String channelKey= "";

_log.debug("********HttpRequestSignInputCheck requestParams**********" +values);

String queryString=SignCheck.createLinkString(values);

_log.info("请求的URL:" + request.getRequestURL().toString() + "?" +queryString);/*******验证渠道合法性********/

if(StringUtils.isBlank(clientId)) {

String respMsg= "clientId不能为空";

StandardResult resultBase= newStandardResult();

resultBase.setStatus(StandardResult.FAIL);

resultBase.setMessage(respMsg);

RenderHelper.render(resultBase, response);return;

}

Map params = new HashMap();

params.put("idClient", clientId);

StandardResult result= HttpClientUtils.sendHttpMethod(api_url+"/product/getClientInfo", params, Contants.HTTP_METHOD_POST);if (result.getData()!=null&&!"null".equals(String.valueOf(result.getData()))&&StringUtil.isNotEmpty(String.valueOf(result.getData()))) {

ClientInfoModel clientInfo= JSON.parseObject(String.valueOf(result.getData()),ClientInfoModel.class);if(clientInfo==null||StringUtil.isEmpty(clientInfo.getClientKey())){

String respMsg= "渠道商查询信息有误,请联系系统管理员!";

StandardResult resultBase= newStandardResult();

resultBase.setStatus(StandardResult.FAIL);

resultBase.setMessage(respMsg);

RenderHelper.render(resultBase, response);return;

}

channelKey=clientInfo.getClientKey();

}else{

result.setData("");

result.setCount(0);/*result.setMessage(Contants.MSG_CHANNELID_ERROR);

result.setStatus(Contants.STATUS_CHANNELID_ERROR);*/

if(StringUtils.isNotBlank(result.getMessage())){

result.setMessage(result.getMessage());

result.setStatus(result.getStatus());

}else{

result.setMessage(Contants.MSG_CHANNELID_ERROR);

result.setStatus(Contants.STATUS_CHANNELID_ERROR);

}

RenderHelper.render(result, response);return;

}if(!devMode){/**********验证签名**********/

boolean status = SignCheck.getSignVeryfy(values, values.get("sign"),channelKey);if (!status) {

StandardResult resultBase= newStandardResult();

resultBase.setStatus(StandardResult.SIGN_ERROR);

resultBase.setMessage("签名验证失败");

RenderHelper.render(resultBase, response);return;

}

}

_log.info("**********HttpRequestSignInputCheck finished***************");

chain.doFilter(req,response);

}

}

@Overridepublic void init(FilterConfig filterConfig) throwsServletException {

excludedPages= filterConfig.getInitParameter("excludedPages");if(StringUtils.isNotEmpty(excludedPages)){

excludedPagesArray= excludedPages.split(",");

}

}static{

api_url= PropConfigUtil.getValueByKey("api.url");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值