zoukankan      html  css  js  c++  java
  • Java拦截器

      拦截器,主要用于拦截前端请求,常用于登录检查。

      下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:

    配置方式:

    1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor这个拦截器。

    <mvc:interceptors>
        <!-- 登录检查拦截器 -->
        <mvc:interceptor>
            <mvc:mapping path="/admin/**" />
            <bean class="com.blog.interceptor.LoginInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
    

      

    2、再看com.blog.interceptor.LoginInterceptor的实现代码:

    public class LoginInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
            SysUser currentUser = SessionHelper.getCurrentUser(arg0);
            if (currentUser == null) {
                // 拦截,重定向到登陆页面
                // 需要加上当前请求路径
                arg1.sendRedirect(arg0.getContextPath() + "/Login/loginpage.do");
    
                return false;
            }
    
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                throws Exception {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
            // TODO Auto-generated method stub
    
        }
    
    }
    

    对于客户端的每次登录,都先记录登录用户的用户名信息,对于每次请求,获取session中的用户信息,如果用户信息为空,则认为该用户未登录,则跳转到登录页面。

    注解方式:

    拦截类是一样的,只需要增加配置类。

    //页面配置类,不再使用xml配置需要拦截打请求
    @Configuration
    public class WebMvcConfg extends WebMvcConfigurationSupport {
    
        @Autowired
        private LoginInterceptor loginInterceptor;// 需要使用的拦截器,对于所有admin开头的请求都需要进行登录拦截
    
        // 拦截器链
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // addPathPatterns 用于添加拦截规则
            // excludePathPatterns 用于排除拦截
            registry.addInterceptor(loginInterceptor).addPathPatterns("/admin/**")
                    .excludePathPatterns("/admin/**/exportUser","/admin/**/exportAllUser");
        }
    
        // 处理静态资源
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
        }
    
    }
    

      

  • 相关阅读:
    [每日一讲] Python系列:浅拷贝与深拷贝
    [每日一讲] Python系列:变量、内存管理与传递
    [每日一讲] Python系列:字典
    [每日一讲] Python系列:列表与元组
    [已开源/文章教程]独立开发 一个社交 APP 的源码/架构分享 (已上架)
    从选择到上传,可能是最贴心的高仿朋友圈编辑了
    完整的社交app源码android+laravel
    基于Laravel+Swoole开发智能家居后端
    APP架子迁移指南(三)
    Laravel如何优雅的使用Swoole
  • 原文地址:https://www.cnblogs.com/leanfish/p/8868628.html
Copyright © 2011-2022 走看看