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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值