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与自定义权限校验的更多相关文章

  1. 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

    一.前言 在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制.这是目前最常被开发者使用也是相对易用.通用权限模型.当然SpringSecurity已经实 ...

  2. SpringSecurity 进行自定义Token校验

    背景 Spring Security默认使用「用户名/密码」的方式进行登陆校验,并通过cookie的方式存留登陆信息.在一些定制化场景,比如希望单独使用token串进行部分页面的访问权限控制时,默认方 ...

  3. springboot2.0整合springsecurity前后端分离进行自定义权限控制

    在阅读本文之前可以先看看springsecurity的基本执行流程,下面我展示一些核心配置文件,后面给出完整的整合代码到git上面,有兴趣的小伙伴可以下载进行研究 使用maven工程构建项目,首先需要 ...

  4. springboot通过AOP和自定义注解实现权限校验

    自定义注解 PermissionCheck: package com.mgdd.sys.annotation; import java.lang.annotation.*; /** * @author ...

  5. 使用AOP+自定义注解完成spring boot的接口权限校验

    记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ...

  6. SpringSecurity+Token实现权限校验

    1.Spring Security简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配 ...

  7. SpringCloud(8)---zuul权限校验、接口限流

    zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...

  8. ruoyi接口权限校验

    此文章属于ruoyi项目实战系列 ruoyi系统在前端主要通过权限字符包含与否来动态显示目录和按钮.为了防止通过http请求绕过权限限制,后端接口也需要进行相关权限设计. @PreAuthorize使 ...

  9. Spring AOP 实现功能权限校验功能

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 使用拦截器实现未登录时跳转到登录界面的功能 1 拦截器SecurityInterceptor 2spring-mvcxml拦 ...

  10. 基于Spring Aop实现类似shiro的简单权限校验功能

    在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...

随机推荐

  1. k8s——核心概念篇

    服务的分类 有状态 代表应用 nginx apache 优点 对客户端透明,无依赖关系,可以高效实现扩容,迁移 缺点 不能存储数据,需要额外的数据服务支撑 无状态 代表应用 MYSQL Redis 优 ...

  2. git基础命令 gitHub

               git 和 gitHub             git : 本地项目版本管理工具             gitHub : 相当于一个有很多功能的百度云盘,存储本地项目版本,管 ...

  3. LeetCode 221. Maximal Square 最大正方形(C++/Java)

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's an ...

  4. Codeforces Round 923 (Div. 3) 比赛记录

    Codeforces Round 923 (Div. 3) 这是我第二次参加 cf阴间场. 10 minutes ago: 这次报名人数超过 4 万,一开始网站就崩溃了,比赛延迟了 10 分钟..开局 ...

  5. 燕千云助力ITSM知识沉淀与复用

    数字化时代IT服务知识沉淀痛点 随着企业数字化进程的推进,企业需要购入更多的智能化.数字化设备及软件,高效生产的同时,问题也层出不穷.而IT服务管理,可以为企业减少密集型的资源消耗,帮助企业以更高效. ...

  6. @Async异步方法对异常的处理,从内层向外层抛出机制

    @Async异步方法对异常的处理,从内层向外层抛出机制 @RequestMapping(value = "/test", method = RequestMethod.GET) p ...

  7. Android程序获取鸿蒙手机设备信息(是否鸿蒙手机、版本号、小版本号等)

    1.效果图 鸿蒙手机 --> 关于手机的截图: Android程序获取鸿蒙手机设备信息的截图: 2.实现 本案例DEMO的实现主要借鉴了网上现有的资料: https://blog.csdn.ne ...

  8. Docker安装InfluxDB1.x和InfluxDB2.x以及与SpringBoot整合

    两者区别: 1.x 版本使用 influxQL 查询语言,2.x 和 1.8+(beta) 使用 flux 查询语法:相比V1 移除了database 和 RP,增加了bucket. V2具有以下几个 ...

  9. 浮点数格式:FP64, FP32, FP16, BFLOAT16, TF32之间的相互区别

    浮点数格式 (参考1,参考2) 浮点数是一种用二进制表示的实数,它由三个部分组成:sign(符号位).exponent(指数位)和fraction(小数位).不同的浮点数格式有不同的位数分配给这三个部 ...

  10. 使用Github Action来辅助项目管理

    Github action 是一个Github官方提供的非常流行且速度集成 持续集成和持续交付(CI/CD)的工具.它允许你在GitHub仓库中自动化.定制和执行你的软件开发工作流.你可以发现.创建和 ...