Spring MVC代码实例系列

超级通道 : MVC代码实例系列-绪论
本章主要记录 MVC实现简单的权限控制拦截器和请求信息统计拦截器 。本章涉及的知识点有:
- mvc: : MVC拦截器的XML配置标签
- apter:拦截器适配器,一般用来继承,以实现项目需要的拦截器 。
- X--With:的的一种信息,用于标志此请求是否为ajax请求 。
- apper:请求的包装器,一般用来继承,用以实现对的包装器 。
- :封装的一个抽象过滤器,能够保证每个只过滤一次 。
- :线程内的局部变量 。
1.关于拦截器的简介
拦截器是 AOP(- ,面向切面的编程)的一种实现,他的作用与较为类似,就是实现了将一些公共代码抽离出来统一处理的功能 。
拦截器的应用场景有很多,如:日志记录、权限检查、性能监控、通用行为等等 。其实现原理都是一致的,就是在[方法执行前]、[方法执行后,视图渲染前]和[方法执行后]这三个切面中,获取、、等信息,然后对这些信息进行统一处理 。
本章主要实现以下两种场景:
【Spring MVC代码实例系列】1. 获取每次业务请求的信息:控制器、方法、请求方式、请求路径、请求参数、方法执行耗时 。
2. 简单的权限校验:检查每次请求中是否存在字段,不存在跳转至登录页面 。
2.简单权限校验拦截器
实现思路:通过重写方法,在每次请求方法执行之前,对中的信息进行检查,然后做出相应处理 。

Spring MVC代码实例系列

文章插图
2.1.-mvc-.xml

2.2..java拦截器
package pers.hanchao.hespringmvc.interceptors.interceptor;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import pers.hanchao.hespringmvc.interceptors.JsonResult;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;/*** 简单的权限校验拦截器,分别处理了ajax和非ajax请求* Created by 韩超 on 2018/1/25.*/public class SessionCheckHandlerInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取session新String username = (String) request.getSession().getAttribute("username");//如果session为空,则跳转这登录页面if (null == username || "".equals(username)){//获取request头信息,判断是否是ajax请求String headerAjax = request.getHeader("X-Requested-With");//如果是ajax请求,则应该通过response.getWriter返回前端if ("XMLHttpRequest".equals(headerAjax)){//设置返回的ajax对象,并转化成String字符串JsonResult jsonResult = new JsonResult(-1,"会话过期");ObjectMapper objectMapper = new ObjectMapper();String jsonStr = objectMapper.writeValueAsString(jsonResult);//通过response写会前台PrintWriter pw = response.getWriter();pw.write(jsonStr);pw.flush();pw.close();//方法返回false,表示流程终止,不会再调用其他拦截器return false;}else {//如果是普通请求,直接重定向至登录页面即可 。response.sendRedirect(request.getContextPath() + "/login.jsp");}}//方法返回true,表示流程继续,继续调用其他拦截器return true;}}
2.3.登录相关代码
User.java用来存储用户信息
public class User {private String username;private String password;//toString/setter/getter}