Spring MVC Interceptor 拦截器 api接口 简单token验证

来源:互联网 发布:mac界面仿真器 编辑:程序博客网 时间:2024/05/23 01:21

Spring MVC Interceptor 拦截器 api接口 简单token验证

2014年09月05日 ⁄ 综合 ⁄ 共 4503字 ⁄ 字号 小 中 大 ⁄ 评论关闭
<iframe id="iframeu1788635_0" src="http://pos.baidu.com/fcfm?rdid=1788635&amp;dc=2&amp;di=u1788635&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=236x877&amp;dcb=BAIDU_SSP_define&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1473386183906&amp;ti=Spring%20MVC%20Interceptor%20%E6%8B%A6%E6%88%AA%E5%99%A8%20api%E6%8E%A5%E5%8F%A3%20%E7%AE%80%E5%8D%95token%E9%AA%8C%E8%AF%81%20%7C%20%E5%AD%A6%E6%AD%A5%E5%9B%AD&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1303x707&amp;pss=1303x256&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1473386184&amp;rw=707&amp;ltu=http%3A%2F%2Fwww.xuebuyuan.com%2F2094334.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DwOe-rfkqCgkSyyvokgXkth4O_uh4ZaRBItf4S4NcG9hMFf9bb9_Vn4AnGoMP9tnz%26wd%3D%26eqid%3D9651a0b50001b8ea0000000257d216a3&amp;ecd=1&amp;psr=1366x768&amp;par=1303x768&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1473386184&amp;qn=16c05838eeb35729&amp;tt=1473386183831.170.243.245" width="336" height="280" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; vertical-align: bottom; background: transparent;"></iframe>

用Spring MVC做api接口,在请求中加入token做简单的验证

服务器:

拼接token之外所有参数,最后拼接token_key,做MD5,与token参数比对

如果token比对失败返回状态码 500

public class APIInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {Log.info(request);String token = request.getParameter("token");// token is not needed when debugif(token == null) return true;  // !! remember to comment this when deploy on server !!Enumeration paraKeys = request.getParameterNames();String encodeStr = "";while (paraKeys.hasMoreElements()) {String paraKey = (String) paraKeys.nextElement();if(paraKey.equals("token")) break;String paraValue = request.getParameter(paraKey);encodeStr += paraValue;}encodeStr += Default.TOKEN_KEY;Log.out(encodeStr);if ( ! token.equals(DigestUtils.md5Hex(encodeStr))) {response.setStatus(500);return false;}return true;}@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {Log.info(request);}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {}}

spring-config.xml配置中加入

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/api/*" /><bean class="cn.web.interceptor.APIInterceptor" /></mvc:interceptor></mvc:interceptors>

客户端:

拼接请求接口的所有参数,最后拼接token_key,做MD5,作为token参数

请求样例:http://127.0.0.1:8080/interface/api?key0=param0&key1=param1&token=md5(concat(param0, param1))

api测试页面,用到了Bootstrap和AngularJS,还有一个js的hex_md5函数
<!doctype html><html ng-app><head><meta charset="UTF-8"><title>API test</title><link href="../css/bootstrap.min.css" rel="stylesheet"><script src="../js/md5.min.js"></script><script src="../js/angular.min.js"></script><script>function API(url){this.url = arguments[0];this.params = Array.prototype.slice.call(arguments, 1, arguments.length);this.request = function(params){var addr = url;var values = Array.prototype.slice.call(arguments, 1, arguments.length);if(params[0] != undefined && values[0] != undefined && values[0] != '')addr += '?' + params[0] + "=" + values[0];for(var i=1; i < values.length; i++)if(params[i] != undefined && values[i] != undefined && values[i] != '')addr += "&" + params[i] + "=" + values[i];return addr;}}function APIListCtrl($scope) {$scope.md5 = hex_md5;$scope.token_key = "9ae5r06fs8";$scope.concat = function(){var args = Array.prototype.slice.call(arguments, 0, arguments.length);args.push($scope.token_key);return args.join("");}$scope.apilist = [new API("account/login", "username", "pwd"),new API("account/register", "username", "pwd", "tel", "code"),] ;}</script></head><body><div ng-controller="APIListCtrl"><div> Search: <input type="text" ng-model="search"><hr> token_key <input type="text" ng-model="token_key"> md5 <input type="text" ng-model="str"> {{md5(str)}} </div><hr><div ng-repeat="api in apilist | filter:search" ><form action="{{api.url}}" method="post"><a href="{{api.request(api.params, value0, value1, value2, value3, value4, value5, value6, value7, value8, value9)}}">{{api.request(api.params, value0, value1, value2, value3, value4, value5, value6, value7, value8, value9)}}</a><br>{{concat(value0, value1, value2, value3, value4, value5, value6, value7, value8, value9)}}<br>{{api.params[0]}} <input id="{{api.params[0]}}" name="{{api.params[0]}}" ng-model="value0" ng-hide="api.params[0]==undefined">{{api.params[1]}} <input id="{{api.params[1]}}" name="{{api.params[1]}}" ng-model="value1" ng-hide="api.params[1]==undefined">{{api.params[2]}} <input id="{{api.params[2]}}" name="{{api.params[2]}}" ng-model="value2" ng-hide="api.params[2]==undefined">{{api.params[3]}} <input id="{{api.params[3]}}" name="{{api.params[3]}}" ng-model="value3" ng-hide="api.params[3]==undefined">{{api.params[4]}} <input id="{{api.params[4]}}" name="{{api.params[4]}}" ng-model="value4" ng-hide="api.params[4]==undefined">{{api.params[5]}} <input id="{{api.params[5]}}" name="{{api.params[5]}}" ng-model="value5" ng-hide="api.params[5]==undefined">{{api.params[6]}} <input id="{{api.params[6]}}" name="{{api.params[6]}}" ng-model="value6" ng-hide="api.params[6]==undefined">{{api.params[7]}} <input id="{{api.params[7]}}" name="{{api.params[7]}}" ng-model="value7" ng-hide="api.params[7]==undefined">{{api.params[8]}} <input id="{{api.params[8]}}" name="{{api.params[8]}}" ng-model="value8" ng-hide="api.params[8]==undefined">{{api.params[9]}} <input id="{{api.params[9]}}" name="{{api.params[9]}}" ng-model="value9" ng-hide="api.params[9]==undefined">token <input id="token" name="token" value="{{md5(concat(value0, value1, value2, value3, value4, value5, value6, value7, value8, value9))}}"><input type="submit" class="btn" ng-hide="api.params[0]==undefined"></form><hr></div></div></body></html>
1 0
原创粉丝点击