2018-5-28 日志记录(Spring MVC拦截器)

今日工作:由于大半天的课设,时间不是很充裕,学习完成了使用Spring MVC实现的登录验证。

什么是SpringMVC拦截器?

SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对请求进行拦截和处理。

是使用面向切面(AOP)的一处用途。

常见应用场景:
1、权限检查:如检测请求是否具有登录权限,如果没有直接返回到登陆页面。 
2、性能监控:用请求处理前和请求处理后的时间差计算整个请求响应完成所消耗的时间。 

3、日志记录:可以记录请求信息的日志,以便进行信息监控、信息统计等。

简单上手:

1、建立一个拦截器实现HandlerInterceptor接口

package com.my.interceptors;
import com.my.dto.StaffDTO;
import com.my.prosonalmanagment.staff.entity.Staff;
import org.apache.log4j.Logger;
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;

public class LoginInterceptors implements HandlerInterceptor {

    private Logger logger = Logger.getLogger(this.getClass());
    /**
     * Handler 执行之前调用该方法
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        //  获取请求地址
        String url = httpServletRequest.getRequestURI();
        if (url.indexOf("login.do") > 0) {
            return true;
        }
        // 判断Session
        HttpSession session = httpServletRequest.getSession();
        StaffDTO staff = (StaffDTO)session.getAttribute("user");
        if (staff != null) {
            logger.info("用户已经登录!");
            return true;
        }
        // 不符合条件的直接,跳向登录界面

        logger.info("用户未登录!");
        httpServletRequest.getRequestDispatcher("/web/login.html").forward(httpServletRequest, httpServletResponse);
        return false;
    }

    /**
     * 视图返回之前调用
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    /**
     * Handler调用之后执行
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param e
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

2、配置文件

    <!--配置拦截器-->
    <mvc:interceptors>
        <!--多个拦截器顺序执行-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/> 拦截全局
            <bean class="com.my.interceptors.LoginInterceptors"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

这样一个基于全局的拦截器就可以使用了,所有的请求拦截都可以自己修改规则,根据需求,可以在里面加入很多处理。

执行顺序

1、单个实现类的执行顺序

preHandler -> Controller -> postHandler -> model渲染-> afterCompletion

2、多个实现类的执行顺序

———————preHandler1——————- 
———————preHandler2——————- 
———————preHandler3——————- 
———————–Controller——————— 
———————postHandler3—————— 
———————postHandler2—————— 
———————postHandler1—————— 
——————afterCompletion3—————- 
——————afterCompletion2—————- 
——————afterCompletion1—————-

问题及解决:在应用到自己的项目中的时候,一开始没有配置配置文件,一直出不来效果,后面加上

了配置文件,发现类型转换错误,我放入session的是StaffDTO,我却转成Staff,经过错误栈打印,

很快定位到错误位置。

明日计划:明日计划熟悉自己的开发平台,快速的构件好一个应用程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值