拦截器


基于springMVC的拦截器

springMVC的拦截器是一个AOP的具体应用
该拦截器只能再springMVC中使用

登录判断验证(拦截器的一个具体实现)

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>


    
        DispactcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
    
    
        DispactcherServlet
        /
    
    
        EncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        EncodingFilter
        /*
    


spring-mvc.xml配置

<?xml version="1.0" encoding="UTF-8"?>

    
    
    
    
    
    
    
        
        
        
        
    
    
    
        
            
            
            
        
    

controller的编写

package com.Google.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


@Controller
public class testController{
    /*编写一个登录拦截,当没有登入不能进首页,登录了以后才能进,再加一个注销功能*/
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "log";
    }
    @RequestMapping("/Login")
    public String login(@RequestParam("username") String  name, HttpSession session, Model model){
        System.out.printf("name:"+name);
        /*保存session,用于判断是否登录*/
        session.setAttribute("loginINFO",name);
        System.out.println(session.getAttribute("loginINFO"));
        model.addAttribute("name",name);
        return "main";
    }
    @RequestMapping("/toMain")
    public String toMain(){
        return "main";
    }
    @RequestMapping("/logOut")
    public String logOut(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.removeAttribute("loginINFO");
        return "main";
    }

}

拦截器的编写(实现了HandlerInterceptor接口的类就叫拦截器)主要编写preHandle方法,这是拦截器的入口

package com.Google.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class logInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /*没有登录不能进入首页*/
        if(request.getRequestURI().contains("Login")){
            return true;
        }
        if(request.getSession().getAttribute("loginINFO")!=null){
            return true;
        }
        //用户没有登录跳转到登录页面
        request.getRequestDispatcher("/WEB-INF/jsp/log.jsp").forward(request,response);
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

前端的编写

起始页(index.jsp)

<%--
  Created by IntelliJ IDEA.
  User: make
  Date: 2022/2/14
  Time: 12:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  

登录 首页

登录页面(log.jsp)在WEB-INF/jsp包下

<%--
  Created by IntelliJ IDEA.
  User: make
  Date: 2022/2/14
  Time: 13:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录


用户名: 密码:

首页页面(log.jsp)在WEB-INF/jsp包下

<%--
  Created by IntelliJ IDEA.
  User: make
  Date: 2022/2/14
  Time: 13:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


这里是首页

${name}

注销

配置好Tomcat,测试即可