拦截器
基于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,测试即可