应用市场中Java拦截器和切面的使用实例详解
程序员文章站
2023-12-16 11:07:34
相信大家对拦截器和切面的概念已经不陌生了,本文我们就看一些在应用市场中,拦截器和切面的使用是怎样的。
拦截器的使用:每次接收到某个请求之前,都会调用此拦截器中的方法,其中...
相信大家对拦截器和切面的概念已经不陌生了,本文我们就看一些在应用市场中,拦截器和切面的使用是怎样的。
拦截器的使用:每次接收到某个请求之前,都会调用此拦截器中的方法,其中prehandle方法如果return true,表示继续调用对应的controller,如果return false,
public class checklogininterceptor implements handlerinterceptor { private logger logger = logger.getlogger(checklogininterceptor.class); private static string token_valid_msg ; static { token_valid_msg=jsonutil.writeobject2json(new amsresultvo(codenum.token_valid, codemessage.token_valid)); } public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { //request.getmethod获取请求是get,post等 if ("options".equals(request.getmethod())) { // 指定允许其他域名访问 response.setheader("access-control-allow-origin", "*"); // 响应类型 response.setheader("access-control-allow-methods", "post, get, options, delete"); // 响应头设置 response.setheader("access-control-allow-headers", "content-type, x-requested-with, x-custom-header"); response.setstatus(204); return true; } // 获取从header中得到的数据 string username = request.getheader(commonconsts.param_user_name); string usertoken = request.getheader(commonconsts.param_user_token); boolean result = true; string method = request.getrequesturi(); if(method.equals("/ams/fileupload")) { return true; } if(stringutil.isempty(username) || stringutil.isempty(usertoken)) { result = false; } else { result = tokenutil.validtoken(username, usertoken); } // token校验失败 if(!result) { response.setcontenttype("text/html;charset=utf-8"); response.getwriter().print(token_valid_msg); response.getwriter().flush(); response.getwriter().close(); } return result; } public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception { } public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception { } }
切面的使用:
//坏绕通知:需要携带proceedingjoinpoint类型的参数 //环绕通知类似于动态代理的全过程:proceedingjoinpoint类型的参数可以决定是否执行目标方法 //且环绕通知必须有返回值,返回值即目标方法的返回值。 @around("execution(* com.sowell.controller.*controller.*(..))") public object aroundmethod(proceedingjoinpoint pjd) { object result = null; string methodname = pjd.getsignature().getname(); object args = arrays.aslist(pjd.getargs()); //执行目标方法 try { logger.info("request channels begin, param{pagenum:" + methodname + ", pagesize:" + args); //前置通知,表示在此之前的代码会在调用controller之前调用 result = pjd.proceed(); recordoprationlog(result, methodname, result); //后置通知 logger.info("arround:the method "+ methodname+" ends"); } catch (throwable e) { e.printstacktrace(); //异常通知 logger.error("arround:the method "+ methodname+"occurs exception:"+e); //throw new runtimeexception(e); //不抛出异常的话,异常就被上面抓住,执行下去,返回result,result值为null,转换为int } //返回通知 logger.info("arround:the method "+ methodname+" ends with the result "+ result); return result; }
总结
以上就是本文关于应用市场中java拦截器和切面的使用实例详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!