SpringMVC 拦截器

1:业务测试说明

不登录的情况下 直接访问welcome.jsp会被拦截

拦截器过滤登录页、登录验证请求以及登录的情况下

2:编写controller

com\applesnt\controller\LoginController.java

package com.applesnt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/user")
public class LoginController {

    //请求登录界面
    @RequestMapping("/login.html")
    public String toLogin(){
        return "login";
    }

    //登录校验
    @RequestMapping("/loginVerification")
    public String login(HttpServletRequest request,String username, String password){
        //获取sesison
        HttpSession session = request.getSession();
        //判断用户名和密码的正确性
        if("admin".equals(username)&&"123456".equals(password)){
            //把用户名放到session中
            session.setAttribute("LoginUsername",username);
            //判断正确则进入主界面
            return "welcome";
        }else {
            //判断错误则进入登录页
            return "login";
        }
    }

    //直接请求系统首页界面
    @RequestMapping("/welcome.html")
    public String towelcome(){
        return "welcome";
    }
}

3:创建相关页面

web\WEB-INF\jsp\login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="/user/loginVerification">
    用户名:<input type="text" name="username"><br />
    密  码:<input type="text" name="password"><br />
    <input type="submit" value="登录">
</form>
</body>
</html>

web\WEB-INF\jsp\welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>您好:${sessionScope.LoginUsername}  欢迎进入系统主界面</h3>
</body>
</html>

4:编写拦截器类

实现HandlerInterceptor接口
com\applesnt\interceptor\LoginInterceptor.java

package com.applesnt.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//实现HandlerInterceptor接口
public class LoginInterceptor implements HandlerInterceptor {

    /*业务执行前
    * return false:不放行
    * return true:放行
    * */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取session
        HttpSession session = request.getSession();
        //获取用户名
        String loginValue = (String) session.getAttribute("LoginUsername");
        //如果session中的用户名有值则放行
        if (loginValue != null){
            return true;
        }

        //获取前端传递过来的uri
        String uri = request.getRequestURI();

        //如果是访问登录界面请求则放行
        if("/user/login.html".equals(uri)){
            return true;
        }

        //如果是登录验证请求则放行
        if("/user/loginVerification".equals(uri)){
            return true;
        }

        //其他情况则不放行
        return false;
    }

    /*业务执行后*/
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    /*业务执行后:清理*/
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

5:在springmvc-servlet.xml配置拦截器

resources\springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.applesnt.controller"/>

    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />

    <!--annotation-driven配置帮助我们完成处理器映射器和处理器适配器-->
    <mvc:annotation-driven />

    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--配置拦截器-->
    <mvc:interceptors>

        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.applesnt.interceptor.LoginInterceptor" />
        </mvc:interceptor>

    </mvc:interceptors>

</beans>

6:测试

登录地址:http://localhost/user/login.html
首页地址:http://localhost/user/welcome.html

posted @ 2020-04-06 15:18  努力的校长  阅读(131)  评论(0编辑  收藏  举报