springmvc权限验证 annotation注解做springmvc的登录权限校验案例
很久木有写博客了,可能最近换工作了,在适应的新的环境吧! 趁着今天晚上有时间把上次写的案例在博客上讲一下: 写这个案例的原因是组长希望在目前springMvc 项目下 能用注解来管理登陆的权限!接下来来讲一下吧! (1)首先创建一个枚举类: 原因是 我们使用界面一般有两种情况,第一种是ajax的请求(也就是所谓的异步请求),还有就是整个页面刷新,我们把这两种请求用枚举表示 packagecom.zeng.annotation.authority; publicenumResultType{ //页面刷新 page, //json类型 json; }(2)然后是创建注解类 packagecom.zeng.annotation.authority; importjava.lang.annotation.Documented; importjava.lang.annotation.ElementType; importjava.lang.annotation.Retention; importjava.lang.annotation.RetentionPolicy; importjava.lang.annotation.Target; @Target(ElementType.METHOD)//注明注解中有方法 @Retention(RetentionPolicy.RUNTIME) @Documentedpublic@interfaceLogin{ ResultTypevalue()defaultResultType.page; }(3)其次,创建拦截校验url的,其实是整个功能的核心件;(注:当然做登陆权限校验最佳选择还是filter,) packagecom.zeng.annotation.interceptor; importjava.io.OutputStream; importjava.io.OutputStreamWriter; importjava.io.PrintWriter; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; importorg.springframework.web.method.HandlerMethod; importorg.springframework.web.servlet.ModelAndView; importorg.springframework.web.servlet.handler.HandlerInterceptorAdapter; importcom.zeng.annotation.authority.Login; importcom.zeng.annotation.authority.ResultType; importcom.zeng.annotation.entity.User; publicclassLoginInterceptorextendsHandlerInterceptorAdapter{ @Override publicbooleanpreHandle(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler)throwsException{ HandlerMethodhandler2=(HandlerMethod)handler; //获取注解 Loginlogin=handler2.getMethodAnnotation(Login.class); if(null==login){ //木有声明权限,可以放行 returntrue; } HttpSessionsession=request.getSession(); Useruser=(User)session.getAttribute(user); //用户未登录 if(null==user){ //采用传统页面刷新的 if(login.value()==ResultType.page){ request.getRequestDispatcher(/login/getLogin?oprst=falseopmsg=请登录!).forward(request,response); }elseif(login.value()==ResultType.json){ //采用ajax提交的 response.setCharacterEncoding(gbk); response.setContentType(text/html;charset=gbk); OutputStreamout=response.getOutputStream(); PrintWriterpw=newPrintWriter(newOutputStreamWriter(out,gbk)); pw.println({result:false,code:11,errorMessage:您未登录,请先登录}); pw.flush(); pw.close(); } returnfalse; } returntrue; } @Override publicvoidpostHandle(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler, ModelAndViewmodelAndView)throwsException{ super.postHandle(request,response,handler,modelAndView); } @Override publicvoidafterCompletion(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler,Exceptionex) throwsException{ super.afterCompletion(request,response,handler,ex); } }(4)接下来在springmvc.xml 中配置,强调一下我们这里重点不是将springmvc,所以我这里忽略springmvc 的搭建和在web.xml中配置(将在后面专门讲下spring webmvc的自己demo); 喜欢 0