前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java之spring mvc之拦截器

java之spring mvc之拦截器

作者头像
Vincent-yuan
发布2019-09-11 15:16:05
7540
发布2019-09-11 15:16:05
举报
文章被收录于专栏:Vincent-yuan

1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的。

2. 自定义实现一个拦截器的步骤:

a). 定义一个实现 HandlerInterceptor 接口 的类

代码语言:javascript
复制
public class MyInterceptor implements HandlerInterceptor{
    /**
     * 在处理方法之前执行,一般用来做一些准备工作:比如日志,权限检查
     * 如果返回false 表示被拦截,将不会执行处理方法
     * 返回true继续执行处理方法
     */
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        System.out.println("执行preHandler---------"+req.getRemoteHost()+req.getRemoteUser());
        resp.sendRedirect("index.jsp");
        return false;
    }
    /**
     * 在处理方法执行之后,在渲染视图执行之前执行,一般用来做一些清理工作
     */
    @Override
    public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView mv)
            throws Exception {
        System.out.println("执行postHandler");
    }
    /**
     * 在视图渲染后执行  一般用来释放资源
     */
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("执行afterCompletion");
    }
}

b) 在 springmvc 的配置文件中 ,添加拦截器配置

代码语言:javascript
复制
<mvc:interceptors>
        <!-- 定义一个拦截器的配置 -->
        <mvc:interceptor>
            <!-- mapping 指定哪些url被拦截 
                /*表示根路径下的所有请求被拦截-/hello.do
                /**表示根路径及其子路径下的所有请求被拦截/user/add.do
            -->
            <mvc:mapping path="/**"/>
            <!-- 配置拦截器的路径 -->
            <bean class="cn.sxt.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

c) 测试

3. 登录拦截器实现

代码语言:javascript
复制
public class LoginInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
        //验证请求的地址是否是登录地址  如果是继续往下执行
        String uri=request.getRequestURI();
        uri = uri.substring(uri.lastIndexOf("/")+1);
        if(uri.equals("login.do")){
            return true;
        }
        //验证session中是否有用户存在 如果有  继续执行
        if(request.getSession().getAttribute("username")!=null){
            return true;
        }
        //执行跳转到登录页面
        response.sendRedirect(request.getContextPath()+"/login.jsp");
        return false;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档