SpringBoot使用拦截器实现操作权限检查

本文详细介绍了如何在SpringBoot项目中,通过编写PermissionInterceptor拦截器并配置WebMvcConfig,实现基于HTTP请求头的权限检查。通过@Autowired装配资源,拦截器检查用户权限,确保只有具备相应权限的用户才能访问特定控制器操作。
摘要由CSDN通过智能技术生成

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("/??/??","/???/???");
    }
}

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值