zoukankan      html  css  js  c++  java
  • SpringBoot2.X拦截器使用(登录或则权限控制)

    1.新建拦截器配置类: WebMvcConfigurer

    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
    class CustomWebMvcConfigurer implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(getLoginInterceptor()).addPathPatterns("/api/v1/pri/**");
            registry.addInterceptor(new DeleteIntercepter()).addPathPatterns("/api/v1/pri/delete/**");
        }
        @Bean
        public LoginIntercepter getLoginInterceptor(){
            return new LoginIntercepter();
        }
    }
    

    2.登录拦截

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Map;
    
    public class LoginIntercepter implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("LoginIntercepter.preHandle");
    
            String token= request.getHeader("token");
            if (token == null) {
                response.sendError(-1, "请您登录后操作!");
                return false;
            } else {
                try {
                    if (token不合法) {
                        response.sendError(-1, "登录token不合法,请重新登录!");
                        return false;
                    } else {
                        return true;//token验证通过
                    }
    
                } catch (Exception e) {
                    return false;
                }
            }
    //        return HandlerInterceptor.super.preHandle(request, response, handler);
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("LoginIntercepter.postHandle");
            HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("LoginIntercepter.afterCompletion");
            HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        }
    }
    

    3.删除权限控制

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Map;
    
    public class DeleteIntercepter implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("DeleteIntercepter.preHandle");
            //权限判断
            if("无权操作"){
                response.sendError(-1,"您没有权限删除!");
                return false;
            }
            return HandlerInterceptor.super.preHandle(request,response,handler);
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("DeleteIntercepter.postHandle");
            HandlerInterceptor.super.postHandle(request,response,handler,modelAndView);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("DeleteIntercepter.afterCompletion");
            HandlerInterceptor.super.afterCompletion(request,response,handler,ex);
        }
    }
    

    4.拦截器器不不⽣生效常⻅见问题:

    - 是否有加@Configuration
    - 拦截路路径是否有问题 ** 和 *
    - 拦截器器最后路路径⼀一定要 /** 如果是⽬目录的话则是 /*/
    

    5.如何配置不不拦截某些路路径?

    registry.addInterceptor(new
    LoginIntercepter()).addPathPatterns("/api/v1/pri/**")
    //配置不不拦截某些路路径,⽐比如静态资源
    .excludePathPatterns("/**/*.html","/**/*.js");
    

    >>> >>> >>>  菜鸟学习中 >>> >>> >>>

  • 相关阅读:
    Chapter 2 Sockets and Patterns【选译,哈哈】 Part 2 Messags Partterns
    WPF动态更改Image控件图片路径
    Chapter 2 Sockets and Patterns【选译,哈哈】 Part 1
    Chapter 2 Sockets and Patterns【选译,哈哈】 Part 4 Handling Errors and ETERM
    Chapter 2 Sockets and Patterns【选译,哈哈】 Part 3 Messags Partterns
    Visual Studio 2008 测试项目无法正常显示解决办法
    Ext.NET控件介绍—Form控件
    ThoughtWorks(中国)程序员读书雷达
    Ext.net 中日期格式的计算
    Sql 分割 键值对字符串 得到某值对应的名称
  • 原文地址:https://www.cnblogs.com/xiaozhaoboke/p/15686910.html
Copyright © 2011-2022 走看看