本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现
当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面
核心代码
首先是index.jsp,显示链接
1
2
3 String path =request.getContextPath();4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5 %>
6
7
8
9
10
11
12
首页13
14
15
16
17
18
21
22
23
24
29
30
controller类
1 package com.jikexueyuan.demo.springmvc.lesson4.controller;2
3 import javax.annotation.Resource;4 import javax.servlet.http.HttpServletRequest;5
6 import org.springframework.stereotype.Controller;7 import org.springframework.web.bind.annotation.RequestMapping;8 import org.springframework.web.bind.annotation.RequestMethod;9 import org.springframework.web.bind.annotation.RequestParam;10
11 import com.jikexueyuan.demo.springmvc.lesson4.constant.Global;12 import com.jikexueyuan.demo.springmvc.lesson4.exception.MyException;13 import com.jikexueyuan.demo.springmvc.lesson4.model.User;14 import com.jikexueyuan.demo.springmvc.lesson4.service.LoginService;15
16 /**17 * 这个例子讲解了如何定义MVC三层注解,使用@Resource进行注入,以及使用@RequestMapping、@RequestParam 、@SessionAttributes18 */
19
20 @Controller21 public classLoginController extends BaseController {22
23 @Resource24 LoginService service;25
26 @Resource27 HttpServletRequest request;28
29 @RequestMapping("/exception")30 public voidexception() throws MyException{31 throw new MyException("测试springmvc中的异常捕获");32 }33
34 @RequestMapping("/loginpage")35 publicString toLoginPage(){36 return "/WEB-INF/jsp/login.jsp";37 }38
39 @RequestMapping("/user/home")40 publicString toUserHome(){41 return "/WEB-INF/jsp/userhome.jsp";42 }43
44 @RequestMapping("/logout")45 publicString logout(){46 request.getSession().removeAttribute(Global.USER_SESSION_KEY);47 return "redirect:/";48 }49
50 @RequestMapping(value = "/doLogin", method =RequestMethod.POST)51 publicString doLogin(@RequestParam String userName, @RequestParam String password){52
53 try{54 User user =service.doLogin(userName, password);55 request.getSession().setAttribute(Global.USER_SESSION_KEY, user);56 return "redirect:/user/home.html";57 } catch(Exception e) {58 return "/WEB-INF/jsp/login.jsp";59 }60
61 }62
63 }
当点击用户中心时,触发拦截,相关配置如下
在spring-mvc.xml中加上拦截配置,拦截所有URL中包含/user/的请求,当然请求用户中心时就会触发这个拦截器了
1
2
3
4
5
6
7
然后是bean指向的具体的interceptor类,如果session保存的用户信息为null,则跳到login页面,postHandle和afterCompletion方法都不执行,反之都执行。
1 package com.jikexueyuan.demo.springmvc.lesson4.interceptor;2
3 import javax.servlet.http.HttpServletRequest;4 import javax.servlet.http.HttpServletResponse;5
6 import org.springframework.web.servlet.HandlerInterceptor;7 import org.springframework.web.servlet.ModelAndView;8
9 import com.jikexueyuan.demo.springmvc.lesson4.constant.Global;10
11 public classLoginInterceptor implements HandlerInterceptor {12
13 @Override14 publicboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {15 Object user =request.getSession().getAttribute(Global.USER_SESSION_KEY);16 if (user == null) {17 System.out.println("尚未登录,调到登录页面");18 response.sendRedirect("/loginpage.html");19 return false;20 }21
22 return true;23 }24
25 @Override26 public voidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {27 System.out.println("postHandle");28 }29
30 @Override31 public voidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {32 System.out.println("afterCompletion");33 }34
35 }
至此,简单的springmvc拦截器就完成了。