• SpringBoot实战项目(十六)--拦截器配置及登录拦截


    PS:本文重点在如何在Spring-Boot中使用拦截器,关于拦截器的原理请大家查阅资料了解。

    实现自定义拦截器只需要3步: 

    1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口。 

    2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。 

    2、实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中。

    先来自定义一个MyInterceptor拦截器;
    拦截器一般需要继承HandlerInterceptor接口,并需要实现以下三个接口方法:

     1 package com.beilin.interceptor;
     2 
     3 
     4 
     5 
     6 import org.springframework.web.servlet.HandlerInterceptor;
     7 
     8 
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 import java.util.Date;
    12 
    13 /**
    14  *  拦截器
    15  */
    16 public class MyInterceptor implements HandlerInterceptor {
    17 
    18  
    19 
    20     @Override
    21     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    22         //获取登录时保存到session的用户信息
    23         SysUser user = (SysUser) request.getSession().getAttribute("user");
    24         if (user == null) {
    25             //拦截未登录请求,跳转到登录页面
    26             request.getRequestDispatcher("/login").forward(request, response);
    27             return false;
    28         }
    29         return true;
    30     }
    31 
    32     @Override
    33     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    34 
    35     }
    36 
    37     @Override
    38     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    39         }
    40     
    41 
    42 }

    拦截器定义完成后,还需要将拦截器注册才能生效,并指定该拦截器所拦截的场景。

    创建MyWebMvcConfig继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法

    
    
    package com.beilin.interceptor;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    @Configuration
    public class MyWebMvcConfig implements WebMvcConfigurer {

    /**
    * 将自定义拦截器作为bean写入配置
    * @return
    */
    @Bean
    public MyInterceptor myInterceptor(){
    return new MyInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    //拦截处理操作的匹配路径
    //放开静态拦截
    registry.addInterceptor(myInterceptor())
    .addPathPatterns("/**") //拦截所有路径
    .excludePathPatterns("/login", "/", "/exit", "/get_cpacha")//排除路径
    .excludePathPatterns("/xadmin/**");//排除静态资源拦截

    }

    }
    
    

    跟拦截器相关的执行流程如下:

     

     测试--直接访问主页,拦截器自动拦截所有请求,判断用户是否登录,否--跳转到登录页面

  • 相关阅读:
    AngularJS方法 —— angular.bind
    rails 部署 nginx + passenger
    查找并删除
    rails 网站跨域
    From Ruby array to JS array in Rails- 'quote'?
    rails 网站字体
    form_tag
    bundle install 老是中断,可以在gemfile里面把source换成taobao源,可以自动安装
    ruby 功力修炼
    bootstrap 移动自适应界面
  • 原文地址:https://www.cnblogs.com/wx60079/p/12841733.html
Copyright © 2020-2023  润新知