Spring boot如何基于拦截器实现访问权限限制
#代码知识 发布时间: 2026-01-12
遇到一个需求是:要为用户设置不同的菜单、数据访问权限。对于一些特定类型的数据,有的用户可以看有的用户则不可以。一开始没有太多思路,后来一想是不是可以把"特定类型"这个参数通过@PathVariable注解加到路径上,这样就可以通过拦截器拦截后,校验此用户是否可以访问这个路径(类型)下的数据了。

话不多说,以下为具体实践
拦截器配置类
@Configuration
public class UserInterceptorConfig {
//为了保证IDbnetUserService提前实例化,能在userInterceptor使用
//ConditionalOnMissingBean可以保证只有一个IDbnetUserService的实例
@Bean
@ConditionalOnMissingBean(IDbnetUserService.class)
public IDbnetUserService dbnetUserService() {
return new DbnetUserServiceImpl();
}
//拦截器
@Bean(name = "userInterceptor")
public HandlerInterceptor userInterceptor(IDbnetUserService dbnetUserService) {
return new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//url = request.getRequestURI() 判断url是否可以有权限访问而返回true或者false
}
};
}
}
注册拦截器
//注册拦截器
@Bean
public WebMvcConfigurer registerInterceptor(@Qualifier("userInterceptor") HandlerInterceptor userInterceptor) {
return new WebMvcConfigurerAdapter() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//要拦截的路径
List<String> path = interceptorProperties.getPath();
//要排除的路径
List<String> excludePath = interceptorProperties.getExcludePath();
registry.addInterceptor(userInterceptor).addPathPatterns(path.stream().toArray(String[]::new))
.excludePathPatterns(excludePath.stream().toArray(String[]::new));
}
};
}
配置要拦截的路径
@Component
@ConfigurationProperties(prefix = "dbnet.interceptor")
public class InterceptorProperties {
/**
* 需要拦截的接口通配
*/
private List<String> path = new ArrayList<>();
/**
* 需要忽略的接口通配
*/
private List<String> excludePath = new ArrayList<>();
public List<String> getPath() {
return path;
}
public void setPath(List<String> path) {
this.path = path;
}
public List<String> getExcludePath() {
return excludePath;
}
public void setExcludePath(List<String> excludePath) {
this.excludePath = excludePath;
}
}
dbnet: interceptor: path: /dbnet/**,/datanet/** excludePath: /dbnet/detail,/datanet/recommend,/datanet/count,/datanet/getKeys,/datenet/metadata/**
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
代码知识SEO上一篇 : swift5.3 UIColor使用十六进制颜色的方法实例
下一篇 : python实现粒子群算法
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!