SpringSecurity:hasAuthority与自定义权限校验
springsecurity中有两种权限控制方法
1.基于注解
@PreAuthorize("hasAuthority('syst:add')")
他的作用是在controller方法上进行权限校验,如果该用户具有对应的权限则放行,否则抛出AccessDeniedHandler,403(权限不足)
2.基于配置
// 基于配置的权限控制
http
.authorizeRequests()
.antMatchers("/example").hasAuthority("admin");
翻阅一下源码:
// 注解对应的最外层方法,传入注解内对应的权限字符串,进入下一个方法
@Override
public final boolean hasAuthority(String authority) {
return hasAnyAuthority(authority);
}
// 继续向下传播
@Override
public final boolean hasAnyAuthority(String... authorities) {
return hasAnyAuthorityName(null, authorities);
}
// 上述prefix传的是null,即不用处理前缀问题(prefix是在role的判断时使用的) roles即authorities
// 这个方法即通过getAuthoritySet取得一个当前用户的权限集合,然后和roles一一比对,一旦有成功则返回true即可以放行
private boolean hasAnyAuthorityName(String prefix, String... roles) {
Set<String> roleSet = getAuthoritySet();
for (String role : roles) {
String defaultedRole = getRoleWithDefaultPrefix(prefix, role);
if (roleSet.contains(defaultedRole)) {
return true;
}
}
return false;
}
//getRoleWithDefaultPrefix就是拼劲字符串不写了
//getAuthoritySet意思很直白,代码看不太懂,不写了喵。
自定义一份hasAuthority:(效果和系统自带的是一样的,这里只是演示如何实现)
//取出当前用户的所有权限,和注解提供的权限一一比对,
@Component
public class AuthorityExpression {
public boolean hasAuthority(String authority) {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
LoginUser loginUser=(LoginUser) principal;
List<String> permissions = loginUser.getPermissions();
return permissions.contains(authority);
}
}
el表达式:使用自定义权限校验@beanName.method
@PreAuthorize("@authorityExpression.hasAuthority('syst:list')")
securityConfig解读:csrf
http
.csrf().disable()
这里是指关闭了csrf防护,
什么是csrf:攻击者通过欺骗浏览器去访问用户认证过的站点,因为已经在浏览器认证过,所以浏览器会放行操作

csrf的成功离不开cookie,但是我们的前后端分离项目通过请求头自定义的token可以有效防御。也就是说,我们其实是不需要csrf防御的,所以这里选择了关闭
SpringSecurity:hasAuthority与自定义权限校验的更多相关文章
- 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法
一.前言 在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制.这是目前最常被开发者使用也是相对易用.通用权限模型.当然SpringSecurity已经实 ...
- SpringSecurity 进行自定义Token校验
背景 Spring Security默认使用「用户名/密码」的方式进行登陆校验,并通过cookie的方式存留登陆信息.在一些定制化场景,比如希望单独使用token串进行部分页面的访问权限控制时,默认方 ...
- springboot2.0整合springsecurity前后端分离进行自定义权限控制
在阅读本文之前可以先看看springsecurity的基本执行流程,下面我展示一些核心配置文件,后面给出完整的整合代码到git上面,有兴趣的小伙伴可以下载进行研究 使用maven工程构建项目,首先需要 ...
- springboot通过AOP和自定义注解实现权限校验
自定义注解 PermissionCheck: package com.mgdd.sys.annotation; import java.lang.annotation.*; /** * @author ...
- 使用AOP+自定义注解完成spring boot的接口权限校验
记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ...
- SpringSecurity+Token实现权限校验
1.Spring Security简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配 ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- ruoyi接口权限校验
此文章属于ruoyi项目实战系列 ruoyi系统在前端主要通过权限字符包含与否来动态显示目录和按钮.为了防止通过http请求绕过权限限制,后端接口也需要进行相关权限设计. @PreAuthorize使 ...
- Spring AOP 实现功能权限校验功能
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 使用拦截器实现未登录时跳转到登录界面的功能 1 拦截器SecurityInterceptor 2spring-mvcxml拦 ...
- 基于Spring Aop实现类似shiro的简单权限校验功能
在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...
随机推荐
- Android OpenMAX(三)高通OMX组件实现基础
上一节了解了OMX组件实现的基础内容,这一节我们以高通OMX实现为例,简单看看如何实现一个OMX组件.本节代码参考自: omx_core_cmp.cpp qc_omx_component.h omx_ ...
- Android 12(S) MultiMedia Learning(十)ACodec & OMX
这一节的学习分为三块内容,omx hidl service用法.OMX架构.ACodec中的buffer分配. 1.omx hidl service system可以借助vndbinder来访问ven ...
- svn递归添加目录下面所有文件
进入根目录:$ svn add * --force A foo.c A somedir/bar.c A otherdir/docs/baz.doc
- 利用cycript动态调试app
一.准备 ios系统越狱环境 安装ssh 安装cycript 二.执行命令 找到进程注入: 6187 ?? 0:00.70 /var/containers/Bundle/Application/ 61 ...
- Hive 在工作中的调优总结
总结了一下在以往工作中,对于Hive SQL调优的一些实际应用,是日常积累的一些优化技巧,如有出入,欢迎在评论区留言探讨~ 一.EXPLAIN 查看执行计划 二.建表优化 2.1 分区 分区表基本操作 ...
- dom基本获取 标签文本操作
// 总结: // 1, 通过id属性值,获取标签对象 // document.getElementById() // 一个标签对象 ...
- C#.NET FRAMEWORK XML私钥转PKCS1,PKCS8
C#.NET FRAMEWORK XML私钥转PKCS1,PKCS8 使用了 BouncyCastle 这个dll ,到nuget中下载即可. XML私钥转PKCS1 public string Xm ...
- vitepress 如何更换 favicon.ico
favicon.ico 它出现在浏览器标签页上,是网站的标识之一. 准备图标 首先,你需要准备一个符合您要求的图标.通常,favicon.ico 使用的是 .ico 格式的图标文件,大小为 16x16 ...
- kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步
1.之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql. 注:CDC (Chan ...
- CountDownLatch demo演示数据分片多线程处理
# CountDownLatch demo演示数据分片多线程处理 package com.example.core.mydemo; import org.springframework.schedul ...