14.SpringSecurity-web权限方案-用户授权(注解使用)

@Secured

  判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀ROLE_;

  使用注解先要开启注解功能,在配置类或者启动类,一般在启动类上

@MapperScan({"net.master.security.app.masterspringsecurity.dao"})
@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled=true)
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

  访问控制:

@GetMapping("update")
@Secured({"ROLE_role","ROLE_manager"})
public String update(){
    return "hello update ----" + new Date();
}

  角色:

List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale");

  配置:

//当前登录用户,只要具备其中一个角色就可以访问这个路径
.antMatchers("/test/index").hasAnyRole("sale","role")

  测试:当前的权限设置,允许访问/test/index,但不允许访问/test/update
在这里插入图片描述

权限调整,测试:update允许访问

List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale,ROLE_manager");

在这里插入图片描述

@PreAuthorize

  开启注解:

@EnableGlobalMethodSecurity(prePostEnabled = true)

  注解适合进入方法前的权限验证,@PreAuthorize 可以将登录用户的 roles/permissions 参数传到方法中,注意外部是双引号,里面是单引号:

@GetMapping("update")
@PreAuthorize("hasAnyAuthority('admins')")
public String update(){
    return "hello update ----" + new Date();
}

  权限:

List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale,ROLE_manager");

  测试:当前的权限设置,允许访问/test/update
在这里插入图片描述

@PostAuthorize

  先开启注解功能:

@EnableGlobalMethodSecurity(prePostEnabled = true)

  注解使用并不多,在方法执行后再进行权限验证,适合验证带有返回值的权限:

@GetMapping("update")
@PostAuthorize("hasAnyAuthority('admins')")
public String update(){
    System.out.println("update ----");
    return "hello update ----" + new Date();
}

  权限:这里的权限和访问控制的校验是不匹配的

List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_sale,ROLE_manager");

  测试:当权限不匹配的情况下,update方法中的输出语句能否执行

在这里插入图片描述

@PostFilter

  @PostFilter :权限验证之后对数据进行过滤,留下username 是admin1的数据

  表达式中的 filterObject 引用的是方法返回值 List 中的某一个元素

@GetMapping("getAll")
@PostAuthorize("hasAnyAuthority('admins')")
@PostFilter("filterObject.username == 'admin1'")
public List<Users> getAll(){
    List<Users> users = new ArrayList<>();
    users.add(new Users(1,"admin1","666"));
    users.add(new Users(2,"admin2","999"));
    return users;
}

  权限:

List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale,ROLE_manager");

  测试:

在这里插入图片描述

@PreFilter

  @PreFilter: 进入控制器之前对数据进行过滤

@PostMapping("save")
@PreAuthorize("hasAnyAuthority('admins')")
@PreFilter(value = "filterObject.username == 'admin1'")
public String save(@RequestBody List<Users> users){
    return JSON.toJSONString(users);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java开发框架,用于构建独立的、可扩展的、基于Spring的应用程序。Spring Security是一个为Java应用程序提供身份认证和授权的框架,它提供了许多安全功能,如用户认证、角色管理和资源访问控制。OAuth2是一种用于授权的开放标准,它允许应用程序通过第三方身份验证服务器来获取访问令牌,以便访问受保护的资源。 要集成Spring Security OAuth2到Spring Boot 3.0的Web API中,需要以下步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Security OAuth2的依赖。例如,可以添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> ``` 2. 配置Spring Security:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法来配置Spring Security。你可以定义用户认证方式和角色管理等配置。 3. 配置OAuth2:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法。在方法中配置OAuth2的相关信息,如认证服务器URL、客户端ID、客户端密码等。 4. 创建资源服务器:创建一个类,注解为`@RestController`,用于提供Web API接口。在方法上使用`@PreAuthorize`注解定义接口的访问权限。 通过以上步骤,你可以将Spring Boot 3.0的Web API和Spring Security OAuth2集成起来。这样,你的应用程序将具有身份认证、角色管理和资源访问控制的功能,并可以使用OAuth2来授权访问受保护的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值