SpringBoot项目中,使用拦截器实现权限检查

1、编写权限验证拦截器

新建拦截器类PermissionInterceptor ,实现HandlerInterceptor 接口,即为自定义拦截器

//实现HandlerInterceptor接口,为拦截器
@Slf4j
public class PermissionInterceptor implements HandlerInterceptor {

    @Autowired
    private util util;

    @Autowired
    private PermissionService permissionService;

    //controller层之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //从请求头中获取所需参数
        String token = request.getHeader("???").split(" ")[1];
        boolean isHavePermission = checkPermission(token);
        //返回 true,放行  false,拦截
        if (isHavePermission){
            log.info("权限检查通过::操作放行");
            return true;
        } else{
            //设置response,手动返回response响应
            response.setContentType("application/json;charset=utf-8");
            Result<String> error = ResultBuilder.failWithData("权限检查失败::当前用户没有该权限", ResultCode.PERMISSION_NO_ACCESS);
            Gson gson = new GsonBuilder().create();
            response.getWriter().print(gson.toJson(error));
            return false;
        }
    }
}

2、注册自定义的权限验证拦截器,做mvc扩展

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    //注册拦截器bean
    //tip:使用该种方式注册,可在拦截其中使用@AutoWired注解装配bean。使用其他方式(比如new PermissionInterceptor())可能导致装配为null的情况
    //详见:https://blog.csdn.net/ycf921244819/article/details/91388440
    @Bean
    public PermissionInterceptor permissionInterceptor(){
        return new PermissionInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(permissionInterceptor())
                //.excludePathPatterns("/permission/get")
                //添加拦截路径 /** :拦截所有路径
                .addPathPatterns("/??/??","/???/???");
    }
}

在这里插入图片描述

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐