SpringMVC拦截器——实现登录验证拦截器的示例代码
本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现
当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面
核心代码
首先是index.jsp,显示链接
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <basehref="<%=basePath%>"rel="externalnofollow"> <title>首页</title> <metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="Thisismypage"> <!-- <linkrel="stylesheet"type="text/css"href="styles.css"rel="externalnofollow"> --> </head> <body> <divstyle="margin:0auto;padding-top:100px;font-size:18px;"align="center"> <p><ahref="loginpage.html"rel="externalnofollow">登陆</a></p> <p><ahref="user/home.html"rel="externalnofollow">用户中心</a></p> <p><ahref="exception.html"rel="externalnofollow">触发异常</a></p> </div> </body> </html>
controller类
packagecom.jikexueyuan.demo.springmvc.lesson4.controller; importjavax.annotation.Resource; importjavax.servlet.http.HttpServletRequest; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; importorg.springframework.web.bind.annotation.RequestParam; importcom.jikexueyuan.demo.springmvc.lesson4.constant.Global; importcom.jikexueyuan.demo.springmvc.lesson4.exception.MyException; importcom.jikexueyuan.demo.springmvc.lesson4.model.User; importcom.jikexueyuan.demo.springmvc.lesson4.service.LoginService; /** *这个例子讲解了如何定义MVC三层注解,使用@Resource进行注入,以及使用@RequestMapping、@RequestParam、@SessionAttributes */ @Controller publicclassLoginControllerextendsBaseController{ @Resource LoginServiceservice; @Resource HttpServletRequestrequest; @RequestMapping("/exception") publicvoidexception()throwsMyException{ thrownewMyException("测试springmvc中的异常捕获"); } @RequestMapping("/loginpage") publicStringtoLoginPage(){ return"/WEB-INF/jsp/login.jsp"; } @RequestMapping("/user/home") publicStringtoUserHome(){ return"/WEB-INF/jsp/userhome.jsp"; } @RequestMapping("/logout") publicStringlogout(){ request.getSession().removeAttribute(Global.USER_SESSION_KEY); return"redirect:/"; } @RequestMapping(value="/doLogin",method=RequestMethod.POST) publicStringdoLogin(@RequestParamStringuserName,@RequestParamStringpassword){ try{ Useruser=service.doLogin(userName,password); request.getSession().setAttribute(Global.USER_SESSION_KEY,user); return"redirect:/user/home.html"; }catch(Exceptione){ return"/WEB-INF/jsp/login.jsp"; } } }
当点击用户中心时,触发拦截,相关配置如下
在spring-mvc.xml中加上拦截配置,拦截所有URL中包含/user/的请求,当然请求用户中心时就会触发这个拦截器了
<mvc:interceptors> <mvc:interceptor> <!--拦截所有URL中包含/user/的请求--> <mvc:mappingpath="/user/**"/> <beanclass="com.jikexueyuan.demo.springmvc.lesson4.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
然后是bean指向的具体的interceptor类,如果session保存的用户信息为null,则跳到login页面,postHandle和afterCompletion方法都不执行,反之都执行。
packagecom.jikexueyuan.demo.springmvc.lesson4.interceptor; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.springframework.web.servlet.HandlerInterceptor; importorg.springframework.web.servlet.ModelAndView; importcom.jikexueyuan.demo.springmvc.lesson4.constant.Global; publicclassLoginInterceptorimplementsHandlerInterceptor{ @Override publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{ Objectuser=request.getSession().getAttribute(Global.USER_SESSION_KEY); if(user==null){ System.out.println("尚未登录,调到登录页面"); response.sendRedirect("/loginpage.html"); returnfalse; } returntrue; } @Override publicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{ System.out.println("postHandle"); } @Override publicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{ System.out.println("afterCompletion"); } }
至此,简单的springmvc拦截器就完成了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。