本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现
当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面
核心代码
首先是index.jsp,显示链接
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%
3 String path = request.getContextPath();
4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
5 %>
6
7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
8 <html>
9 <head>
10 <base href="<%=basePath%>">
11
12 <title>首页</title>
13 <meta http-equiv="pragma" content="no-cache">
14 <meta http-equiv="cache-control" content="no-cache">
15 <meta http-equiv="expires" content="0">
16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17 <meta http-equiv="description" content="This is my page">
18 <!--
19 <link rel="stylesheet" type="text/css" href="styles.css">
20 -->
21 </head>
22
23 <body>
24 <div style="margin:0 auto;padding-top:100px;font-size:18px;" align="center">
25 <p><a href="loginpage.html">登陆</a></p>
26 <p><a href="user/home.html">用户中心</a></p>
27 <p><a href="exception.html">触发异常</a></p>
28 </div>
29 </body>
30 </html>
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 、@SessionAttributes
18 */
19
20 @Controller
21 public class LoginController extends BaseController {
22
23 @Resource
24 LoginService service;
25
26 @Resource
27 HttpServletRequest request;
28
29 @RequestMapping("/exception")
30 public void exception() throws MyException{
31 throw new MyException("测试springmvc中的异常捕获");
32 }
33
34 @RequestMapping("/loginpage")
35 public String toLoginPage(){
36 return "/WEB-INF/jsp/login.jsp";
37 }
38
39 @RequestMapping("/user/home")
40 public String toUserHome(){
41 return "/WEB-INF/jsp/userhome.jsp";
42 }
43
44 @RequestMapping("/logout")
45 public String logout(){
46 request.getSession().removeAttribute(Global.USER_SESSION_KEY);
47 return "redirect:/";
48 }
49
50 @RequestMapping(value = "/doLogin", method = RequestMethod.POST)
51 public String 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 <mvc:interceptors>
2 <mvc:interceptor>
3 <!-- 拦截所有URL中包含/user/的请求 -->
4 <mvc:mapping path="/user/**"/>
5 <bean class="com.jikexueyuan.demo.springmvc.lesson4.interceptor.LoginInterceptor"></bean>
6 </mvc:interceptor>
7 </mvc:interceptors>
然后是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 class LoginInterceptor implements HandlerInterceptor {
12
13 @Override
14 public boolean 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 @Override
26 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
27 System.out.println("postHandle");
28 }
29
30 @Override
31 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
32 System.out.println("afterCompletion");
33 }
34
35 }
至此,简单的springmvc拦截器就完成了。