springboot 简单集成 spring security(二)权限控制

本文详细介绍了如何在Spring Boot应用中集成Spring Security进行权限控制。首先讲解了如何在内存中设置权限控制,然后通过重写configure(HttpSecurity http)方法实现接口访问权限设置。接着,文章探讨了基于jdbc的动态权限控制,包括创建权限拦截器、访问决策管理器的配置,以及相关配置文件的设置。最后,展示了不同用户权限访问接口的实例结果。
摘要由CSDN通过智能技术生成
简介

上一篇我们实现了springboot简单的集成了spring security,实现了在用户想要实现某一操作时需要进行登陆认证,但是在登陆后用户能够进行所有想要的操作,这并不是我们想要的,我们需要的是当用户访问后,用户能够操作的是我们能够控制他能够操作接口。这里我们就需要进行权限的控制。

1、内存中实现权限控制

在上一篇中我们在实现用户认证后就没有进行相关的操作,这里我们想要在内存中实现权限认证。需要在securityConfig中重写configure(HttpSecurity http)方法,在接口中进行设置。

configure(HttpSecurity http)

在当前方法中能够实现对接口访问权限设置。

@Override
    protected void configure(HttpSecurity http) throws Exception {
   
        http
            .authorizeRequests()
            //设置所有认证后的用户都能够访问所有接口,不需要任何权限
                .anyRequest().authenticated()
            //设置不需要登陆认证就能够访问登陆接口    
            .and()
                .formLogin()
                    .permitAll()
            // 设置不需要登陆认证就能够访问登出接口           
            .and()
                .logout()
                    .permitAll();
    }

如果我们想要对接口进行权限控制这里我们就要将

 //.anyRequest().authenticated()

注释掉,然后再添加

.antMatchers("").hasAnyAuthority("")

然后添加想要进行权限控制的接口和设置访问当前接口需要的权限我们这里只写了/selByPhone接口所以我们的代码如下

.antMatchers("/selByPhone")
    //设置访问当前接口需要的权限
    .hasAnyAuthority("ROLE_query_user")

这里我们设置当前接口需要的权限是"ROLE_query_user"。完整的securityConfig的configure(HttpSecurity http)方法

@Override
    protected void configure(HttpSecurity http) throws Exception {
   
        http
            .authorizeRequests()
//                .anyRequest().authenticated()
            //配置访问当前接口需要的权限
            .antMatchers("/selByPhone")
                .hasAnyAuthority("ROLE_query_user")
            .and()
                .formLogin()
                    .permitAll()
            .and()
                .logout()
                    .permitAll();
    }

然后再数据库中将用户的权限设置为query_user
然后访问selByPhone接口
!](https://img-blog.csdnimg.cn/88043ebba4ad4e3185f343412f8a1bc0.jpeg)

首先登陆没有访问权限的用户
(图片)

登陆后我们能够看到当前用户没有访问权限spring security返回了403页面。
图片

我们登陆有权限的用户,我们看到能够成功登陆(图片)

当然这种设置权限的方式并不是我们想要的,我们不能在写完接口后然后再securityConfig中进行配置,每次都进行这种配置并不是我们需要的,这时我们希望能够灵活的配置权限控制。小编这里基于jdbc进行动态的权限配置。当然并不只这一种方式,比如枚举类等等。

2、基于jdbc动态的权限控制

想要实现基于jdbc动态的权限控制,我们需要拦截请求获取到当前要访问的接口名称,然后再去查询想要访问当前接口需要的权限。
想要实现拦截请求的功能那我们就需要创建一个连接器,这里我们实现Filter完成权限拦截器。然后实现SecurityMetadataSource(安全元数据),完成查询当前需要的权限的功能,这里面我们使用他的子类FilterInvocationSecurityMetadataSource。然后我们再实现AccessDecisionManager(决策访问管理器)在这里我们判断当前登陆的用户是否拥有访问该接口的权限。

权限拦截器
/**
 * @title: PermissionInterc
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耗子尾汁123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值