Skip to content

Commit 430723c

Browse files
committed
springmvc中的拦截器
1 parent 65624a8 commit 430723c

File tree

9 files changed

+261
-2
lines changed

9 files changed

+261
-2
lines changed

WebRoot/WEB-INF/jsp/items/editItems.jsp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
</head>
1212
<body>
13-
1413
<form id="itemForm"
1514
action="${pageContext.request.contextPath }/editItemsSubmit.action"
1615
method="post" enctype="multipart/form-data">

WebRoot/WEB-INF/jsp/items/itemsList.jsp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ function deleteItems() {
1919
</script>
2020
</head>
2121
<body>
22+
<c:if test="${username != null }">
23+
${username } <a href="${pageContext.request.contextPath }/logout.action">退出</a>
24+
</c:if>
2225
<form name="itemsForm"
2326
action="${pageContext.request.contextPath }/editItemsAllSubmit.action"
2427
method="post">

WebRoot/WEB-INF/jsp/login.jsp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<%@ page language="java" contentType="text/html; charset=UTF-8"
2+
pageEncoding="UTF-8"%>
3+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4+
<html>
5+
<head>
6+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7+
<title>登陆页面</title>
8+
</head>
9+
<body>
10+
<form action="${pageContext.request.contextPath }/login.action" method="post">
11+
用户名:<input type="text" name="username" /><br>
12+
密码:<input type="password" name="password" /><br>
13+
<input type="submit" name="提交" />
14+
</form>
15+
</body>
16+
</html>

config/spring/springmvc.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,26 @@
137137
<!-- 静态资源解析,包括js,css,img... -->
138138
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
139139
<mvc:resources location="/img/" mapping="/img/**"></mvc:resources>
140+
141+
<!-- 配置拦截器 -->
142+
<mvc:interceptors>
143+
<!-- 多个拦截器,按顺序执行 -->
144+
145+
<mvc:interceptor>
146+
<mvc:mapping path="/**"/> <!-- 拦截所有的url包括子url路径 -->
147+
<bean class="ssm.interceptor.LoginInterceptor"/>
148+
</mvc:interceptor>
149+
<mvc:interceptor>
150+
<mvc:mapping path="/**"/> <!-- 拦截所有的url包括子url路径 -->
151+
<bean class="ssm.interceptor.HandlerInterceptor1"/>
152+
</mvc:interceptor>
153+
<mvc:interceptor>
154+
<mvc:mapping path="/**"/>
155+
<bean class="ssm.interceptor.HandlerInterceptor2"/>
156+
</mvc:interceptor>
157+
<mvc:interceptor>
158+
<mvc:mapping path="/**"/>
159+
<bean class="ssm.interceptor.HandlerInterceptor3"/>
160+
</mvc:interceptor>
161+
</mvc:interceptors>
140162
</beans>

src/ssm/controller/ItemsController.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.UUID;
66

77
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpSession;
89

910
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.stereotype.Controller;
@@ -205,5 +206,24 @@ public String editItemsQueryResult(ItemsQueryVo itemsQueryVo)
205206
return itemsCustom;
206207
}
207208

208-
209+
//登陆
210+
@RequestMapping("/login")
211+
public String login(HttpServletRequest request, String username, String password) throws Exception {
212+
213+
//实际中要去和数据库匹配的
214+
//....
215+
HttpSession session = request.getSession();
216+
session.setAttribute("username", username);
217+
return "redirect:queryItems.action";
218+
}
219+
220+
//退出
221+
@RequestMapping("/logout")
222+
public String logout(HttpServletRequest request) throws Exception {
223+
224+
225+
HttpSession session = request.getSession();
226+
session.invalidate();
227+
return "redirect:queryItems.action";
228+
}
209229
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ssm.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+
//测试拦截器1
10+
public class HandlerInterceptor1 implements HandlerInterceptor{
11+
12+
//进入Handler方法之前执行
13+
//可以用于身份认证、身份授权。如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行,否则就放行
14+
@Override
15+
public boolean preHandle(HttpServletRequest request,
16+
HttpServletResponse response, Object handler) throws Exception {
17+
18+
System.out.println("HandlerInterceptor1....preHandle");
19+
20+
//false表示拦截,不向下执行;true表示放行
21+
return true;
22+
}
23+
24+
//进入Handler方法之后,返回ModelAndView之前执行
25+
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
26+
@Override
27+
public void postHandle(HttpServletRequest request,
28+
HttpServletResponse response, Object handler,
29+
ModelAndView modelAndView) throws Exception {
30+
31+
System.out.println("HandlerInterceptor1....postHandle");
32+
33+
}
34+
35+
//执行Handler完成之后执行
36+
//应用场景:统一异常处理,统一日志处理
37+
@Override
38+
public void afterCompletion(HttpServletRequest request,
39+
HttpServletResponse response, Object handler, Exception ex)
40+
throws Exception {
41+
42+
System.out.println("HandlerInterceptor1....afterCompletion");
43+
}
44+
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ssm.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+
//测试拦截器1
10+
public class HandlerInterceptor2 implements HandlerInterceptor{
11+
12+
//进入Handler方法之前执行
13+
//可以用于身份认证、身份授权。如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行,否则就放行
14+
@Override
15+
public boolean preHandle(HttpServletRequest request,
16+
HttpServletResponse response, Object handler) throws Exception {
17+
18+
System.out.println("HandlerInterceptor2....preHandle");
19+
20+
//false表示拦截,不向下执行;true表示放行
21+
return true;
22+
}
23+
24+
//进入Handler方法之后,返回ModelAndView之前执行
25+
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
26+
@Override
27+
public void postHandle(HttpServletRequest request,
28+
HttpServletResponse response, Object handler,
29+
ModelAndView modelAndView) throws Exception {
30+
31+
System.out.println("HandlerInterceptor2....postHandle");
32+
33+
}
34+
35+
//执行Handler完成之后执行
36+
//应用场景:统一异常处理,统一日志处理
37+
@Override
38+
public void afterCompletion(HttpServletRequest request,
39+
HttpServletResponse response, Object handler, Exception ex)
40+
throws Exception {
41+
42+
System.out.println("HandlerInterceptor2....afterCompletion");
43+
}
44+
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ssm.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+
//测试拦截器1
10+
public class HandlerInterceptor3 implements HandlerInterceptor{
11+
12+
//进入Handler方法之前执行
13+
//可以用于身份认证、身份授权。如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行,否则就放行
14+
@Override
15+
public boolean preHandle(HttpServletRequest request,
16+
HttpServletResponse response, Object handler) throws Exception {
17+
18+
System.out.println("HandlerInterceptor3....preHandle");
19+
20+
//false表示拦截,不向下执行;true表示放行
21+
return true;
22+
}
23+
24+
//进入Handler方法之后,返回ModelAndView之前执行
25+
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
26+
@Override
27+
public void postHandle(HttpServletRequest request,
28+
HttpServletResponse response, Object handler,
29+
ModelAndView modelAndView) throws Exception {
30+
31+
System.out.println("HandlerInterceptor3....postHandle");
32+
33+
}
34+
35+
//执行Handler完成之后执行
36+
//应用场景:统一异常处理,统一日志处理
37+
@Override
38+
public void afterCompletion(HttpServletRequest request,
39+
HttpServletResponse response, Object handler, Exception ex)
40+
throws Exception {
41+
42+
System.out.println("HandlerInterceptor3....afterCompletion");
43+
}
44+
45+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package ssm.interceptor;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
import javax.servlet.http.HttpServletResponse;
5+
import javax.servlet.http.HttpSession;
6+
7+
import org.springframework.web.servlet.HandlerInterceptor;
8+
import org.springframework.web.servlet.ModelAndView;
9+
10+
//测试拦截器1
11+
public class LoginInterceptor implements HandlerInterceptor{
12+
13+
//进入Handler方法之前执行
14+
//可以用于身份认证、身份授权。如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行,否则就放行
15+
@Override
16+
public boolean preHandle(HttpServletRequest request,
17+
HttpServletResponse response, Object handler) throws Exception {
18+
19+
//获取请求的url
20+
String url = request.getRequestURI();
21+
//判断url是否公开地址(实际使用时将公开地址配置到配置文件中)
22+
//这里公开地址是否登陆提交的地址
23+
if(url.indexOf("login.action") > 0) {
24+
//如果进行登陆提交,放行
25+
return true;
26+
}
27+
28+
//判断session
29+
HttpSession session = request.getSession();
30+
//从session中取出用户身份信息
31+
String username = (String) session.getAttribute("username");
32+
if(username != null) {
33+
return true;
34+
}
35+
36+
37+
//执行到这里表示用户身份需要验证,跳转到登陆页面
38+
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
39+
40+
return false;
41+
}
42+
43+
//进入Handler方法之后,返回ModelAndView之前执行
44+
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
45+
@Override
46+
public void postHandle(HttpServletRequest request,
47+
HttpServletResponse response, Object handler,
48+
ModelAndView modelAndView) throws Exception {
49+
50+
System.out.println("HandlerInterceptor1....postHandle");
51+
52+
}
53+
54+
//执行Handler完成之后执行
55+
//应用场景:统一异常处理,统一日志处理
56+
@Override
57+
public void afterCompletion(HttpServletRequest request,
58+
HttpServletResponse response, Object handler, Exception ex)
59+
throws Exception {
60+
61+
System.out.println("HandlerInterceptor1....afterCompletion");
62+
}
63+
64+
}

0 commit comments

Comments
 (0)