zoukankan      html  css  js  c++  java
  • Spring Boot 拦截器的使用

       java中拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作,一般拦截器方法都是通过动态代理的方式实现,可以通过它来进行权限验证,或者判断用户是否登录,访问日志等功能

    第一步:创建一个类实现HandlerInterceptor接口,重写接口的方法,只是多了一个@Component注解,这个注解是为后面的使用时进行注入,已登录为例,代码如下:

    package main.blog.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import main.blog.entity.AdminBean;
    
    @Component
    public class LoginInterceptor implements HandlerInterceptor 
    {
        //进入 Handler方法之前执行,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception 
        {
            //判断session
            HttpSession  session = request.getSession();
            
            //从session中取出用户身份信息
            AdminBean admin = (AdminBean) session.getAttribute("admin");
            
            if(admin!=null)
            {
                return true;
            }
            
            //执行这里表示用户身份需要认证,跳转登陆页面
            response.sendRedirect(request.getContextPath()+"/admin/login");
            
            //false表示拦截,不向下执行,true表示放行
            return false;
        }
        
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            // TODO Auto-generated method stub
        }
    }

    第二步:创建一个类继承WebMvcConfigurer类并重写addInterceptors方法,springboot2中的,代码如下:

    package main.blog.interceptor;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class WebConfiguration implements WebMvcConfigurer {
        
        /**
         * 登录权限拦截器
         */
        @Autowired
        private LoginInterceptor loginInter;
        
        @Override
        public void addInterceptors(InterceptorRegistry registry) 
        {
            InterceptorRegistration loginRegistry = registry.addInterceptor(loginInter);
            
            //拦截以/admin/为前缀的 url路径
            loginRegistry.addPathPatterns("/admin/**");
            
            //可以通过的白名单请求地址
            loginRegistry.excludePathPatterns("/admin/login");
            loginRegistry.excludePathPatterns("/admin/captcha");
            loginRegistry.excludePathPatterns("/admin/dologin");
            
            //可以通过的白名单静态资源
            loginRegistry.excludePathPatterns("/admin/js/**");
            loginRegistry.excludePathPatterns("/admin/css/**");
            loginRegistry.excludePathPatterns("/admin/img/**");
            loginRegistry.excludePathPatterns("/admin/layui/**");
        }
    }

    到此拦截器的功能就实现啦

  • 相关阅读:
    Educational Codeforces Round 61
    Codeforces Round #548 (Div. 2)
    Codeforces Round #553 (Div. 2)
    spring mvc接口跨域访问
    json解析;百度统计API返回data解析
    HTML img标签使用base64展示图片
    My Sql 查询连续天数数据
    js 获取url地址栏拼接参数
    在jsp页面获取绝对路径
    java web项目配置Tomcat访问项目外文件
  • 原文地址:https://www.cnblogs.com/huxiaoguang/p/10807750.html
Copyright © 2011-2022 走看看