Spring MVC拦截器功能与过滤器的功能类似,不同之处在于,过滤器的应用层面大而粗,一般用于规范传入与传出数据的编码格式的设置,而拦截器的应用层面较为精细,一般是对方法进行拦截,常用于防止盗链,检测用户是否登陆,判断用户的级别等。
需求:
拦截所有未登录的用户,使其跳转至登录页面
登录界面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
用户名:<input name="name" type="text"><br>
密码:<input name="pwd" type="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
登录的验证:
@Controller
public class LoginController {
@RequestMapping("/login")
public String login(String name, String pwd, HttpServletRequest request){
System.out.println(name+"---"+pwd);
if (name.equals("zhang")&&pwd.equals("123456")){
//将name作为关键字存储在session中
request.getSession().setAttribute("name",name);
}
return "redirect:/index.jsp";
}
}
登录成功的index.jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户${name}欢迎登录。
</body>
</html>
新建一个intercepter文件夹,书写拦截方法Logincepter:
package cn.zc.intercepter;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginIncepter implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, @Nullable Exception ex) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String name = (String) request.getSession().getAttribute("name");
String path = request.getContextPath();
if (name==null||name==""){
response.sendRedirect(path+"/login.jsp");
return false;
}
return true;
}
}
在SpringMVC-servlet-xml配置文件中设置拦截器的映射位置:
<mvc:interceptors>
<mvc:interceptor>
<!--拦截所有-->
<mvc:mapping path="/**"/>
<!--不拦截登录页面-->
<mvc:exclude-mapping path="/login"/>
<bean id="loginIncepter" class="cn.zc.intercepter.LoginIncepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
本文介绍如何使用SpringMVC中的拦截器功能来实现对未登录用户的访问拦截,并将其重定向到登录页面。通过具体代码示例展示了拦截器的配置及应用过程。
3344

被折叠的 条评论
为什么被折叠?



