首页 > 其他分享 >SpringBoot动态权限校验,常用的实现方案

SpringBoot动态权限校验,常用的实现方案

时间:2024-01-15 10:44:54浏览次数:32  
标签:SpringBoot request 校验 response 权限 public

SpringBoot.png
Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。

Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。SpringBoot是一个非常流行的Java框架,它提供了许多功能和工具,用于快速构建和部署应用程序。

动态权限校验是一个常见的需求,允许开发人员根据角色和权限动态控制用户对系统资源的访问。在SpringBoot中,常用的动态权限校验实现方案包括以下几种:

  1. 基于注解的权限校验

SpringBoot支持使用注解来实现基于方法或类级别的权限校验。可以使用@PreAuthorize和@PostAuthorize注解来指定访问控制规则。例如:

@PreAuthorize("hasRole('ROLE_ADMIN')")public void deleteResource(Long resourceId) { // 删除资源的逻辑}

上述例子中,deleteResource()方法只有在用户具有ROLE_ADMIN角色时才能被调用。

  1. 基于过滤器的权限校验

另一种常见的实现方案是使用Spring Security框架中的过滤器来实现权限校验。可以定义一个自定义的过滤器,在请求到达控制器之前进行权限校验。例如:

public class AuthorizationFilter extends OncePerRequestFilter {

@Override

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)

        throws ServletException, IOException {        

    // 根据请求路径和用户角色进行权限校验

    if (hasPermission(request)) {

        chain.doFilter(request, response);

    } else {

        response.setStatus(HttpServletResponse.SC_FORBIDDEN);

    }

}    

private boolean hasPermission(HttpServletRequest request) {        // 根据请求路径和用户角色进行权限校验的实现逻辑

}

}

然后,在SpringBoot的配置类中注册该过滤器:

@Configurationpublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired

private AuthorizationFilter authorizationFilter;    @Override

protected void configure(HttpSecurity http) throws Exception {        // 配置其他的安全设置        

    http.addFilterBefore(authorizationFilter, UsernamePasswordAuthenticationFilter.class);

}

}

  1. 基于动态资源配置的权限校验

还有一种常见的方案是使用动态资源配置来实现权限校验。可以从数据库或其他外部配置中加载资源和角色的映射关系,并在请求到达控制器之前进行校验。例如:

public class ResourceBasedAuthorizationInterceptor extends HandlerInterceptorAdapter { @Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

        throws Exception {        

    // 根据请求路径和用户角色进行权限校验        

    if (hasPermission(request)) {          

     return true;

    } else {

        response.sendError(HttpServletResponse.SC_FORBIDDEN);            return false;

    }

}    

private boolean hasPermission(HttpServletRequest request) {        // 根据请求路径和用户角色进行权限校验的实现逻辑

}

}

然后,在SpringBoot的配置类中注册该拦截器:

@Configurationpublic class WebConfig implements WebMvcConfigurer { @Autowired

private ResourceBasedAuthorizationInterceptor authorizationInterceptor;    @Override

public void addInterceptors(InterceptorRegistry registry) {

    registry.addInterceptor(authorizationInterceptor)

            .addPathPatterns("/api/**");

}

}

上述方案提供了不同的实现策略来实现动态权限校验。可以根据具体的需求选择合适的方案,或者根据实际情况组合使用多种方案。

标签:SpringBoot,request,校验,response,权限,public
From: https://www.cnblogs.com/Students028/p/17964924

相关文章

  • 定时任务及异步,自定义注解进行参数校验
    简单来说:浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。 如何在Spring/SpringBoot中优雅地做参数校验?springboot项目使用validation-api......
  • SpringBoot enter door基础_配springBoot项目,读取配置,配置全局异常捕获
    1、Spring是重量级企业开发框架 EnterpriseJavaBean(EJB) 的替代品,Spring为企业级Java开发提供了一种相对简单的方法,通过 依赖注入 和 面向切面编程 ,用简单的 Java对象(PlainOldJavaObject,POJO) 实现了EJB的功能虽然Spring的组件代码是轻量级的,但它的配置却是重......
  • SpringBoot集成Kafka构建消息系统
    一、前言在我们当前的互联网应用中,消息驱动已经成为一种不可或缺的模式,Kafka作为一款高性能的分布式消息系统,已经成为很多公司在消息驱动架构选择中很重要的工具。我们使用SpringBoot和Kafka快速构建消息驱动应用,应对高并发的消息处理业务。Kafka是分布式发布-订阅消息系统。主要特......
  • 计算机硬件-CPU-校验码
    计算机组成部分(冯诺依曼架构):5个部分,运算器、控制器、存储、输入设备、输出设备CPU的功能:程序控制、操作控制、时间控制、数据处理。CPU的组成:主要由运算器、控制器、寄存器和内部总线等部件组成运算器:执行所有的算数运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与或......
  • 基于SpringBoot+Vue的OA办公系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 人脸识别系统【从0到1完成一个小项目】【6】【springboot快速上手】
    1.父类在pom.xml里面添加如上代码,有些会自动生成,没有生成的添加一下<parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.6</version></parent>......
  • SpringBoot集成Jackson实现JSON序列化
    一、前言Jackson是一个在Java中常用的JSON序列化和反序列化库,它具有操作简单、性能优秀、支持多种数据格式等特点,被广泛应用于各种服务端开发中。SpringMVC框架的默认json解析器也是Jackson。当前常见的json解析器还有Gson、fastjson等,jackson的优势是解析大的json文件处理速度快,运......
  • springboot mybatis postgres 对于json类型的字段转换
    在SpringBoot与MyBatis结合使用时,处理PostgreSQL中的JSON类型字段的转换可以分为以下步骤:自定义TypeHandler:为了在Java实体类与数据库的JSON类型字段之间进行转换,需要创建一个自定义的 TypeHandler。例如,针对JSONObject类型的转换器可以这样实现:importorg.apache.ibatis.type.B......
  • Linux的用户和权限 [补档-2023-07-07]
    Linux用户和权限3-1.su用户切换命令exit用户退出命令​用户切换命令的语法:​su[-][用户名]​其中:​-可选,表示是否在切换用户后加载环境变量,建议带上。​用户名可选,表示要切换到那个用户,如果不填则默认切换到root用户上。​......
  • 手拉手Springboot获取yml配置文件信息
    环境介绍技术栈springboot3软件版本mysql8IDEAIntelliJIDEA2022.2.1JDK17SpringBoot3.1.7配置文件说明:启动配置文件优先级:properties高于yml配置文件application.ymlyml是JSON的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代application.properties。在创建一个S......