Spring中RequestContextHolder以及HandlerInterceptorAdapter的使用

Posted jeely

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中RequestContextHolder以及HandlerInterceptorAdapter的使用相关的知识,希望对你有一定的参考价值。

1 . RequestContextHolder 的使用

想要使用RequestContextHolder,要在web.xml中配置RequestContextListener的监听才能使用。

//全局获取session的方法:

HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession();

同时 这样可以获取request和response。

2 . HandlerInterceptorAdapter的使用

在实现跳转到需要登录的页面时,除了用Shiro权限外,还可以通过在登录的方法上添加注解,如果有注解,发现没有登录的话,就跳转到登录页面。

比如做一个登录拦截器

/**
 * 前台专门用于登陆检查的拦截器
 */
public class LoginCheckInterceptor extends HandlerInterceptorAdapter {

    //或者也可以用  implement  HandlerInterceptor 来做

    //适配器实现了HandlerInterceptor的所有方法  我们只需去覆盖需要用到的方法即可

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        //判断登陆逻辑
        //判断当前请求的方法
        if (handler instanceof HandlerMethod) {  //HandlerMethod包装了我这次请求要访问的controller里的具体方法
            HandlerMethod hm = (HandlerMethod) handler;
            RequireLogin rl = hm.getMethodAnnotation(RequireLogin.class);//获取到当前方法上是否有注解
            //rl != null  说明该方法需要登陆才能访问
            if (rl != null && UserContext.getCurrent() == null) {
                response.sendRedirect("/login.html");
                return false; //阻止继续执行
            }
        }
        return super.preHandle(request, response, handler);   //正常的放行
    }
}

需要在applicationContext中配置拦截

<!-- 配置拦截器 -->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/*"/>
        <bean class="com.yl.p2p.base.util.LoginCheckInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

以上是关于Spring中RequestContextHolder以及HandlerInterceptorAdapter的使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Day01 Spring 框架概述以及Spring中基于XML的IOC配置

学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签

spring中 实体类在啥时候交给spring容器管理?

怎么把自己创建的对象加到spring容器中。让spring管理

如何在Maven中配置Spring依赖

Spring中如何在非Spring管理的Bean中获取到Spring管理的Bean并操作