Spring MVC拦截器实现

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>

你可能感兴趣的:(Spring,MVC,SpringMVC拦截器)