SpringSecurity:授权
目录
SpringSecurity 有两种授权方式
基于角色的授权
基于权限的授权
使用注解判断权限
过滤器
用户登录后会根据用户的身份进行角色划分,比如登录图书馆系统,一般就有管理员和普通学生等不同角色。
用户的一个操作实际上就是在访问我们提供的`接口`(编写的对应访问路径的 Servlet),比如登陆,就需要调用`/login`接口,退出登陆就要调用/`logout`接口,因此,决定用户能否使用某个功能,只需要决定用户是否能够访问对应的 Servlet
SpringSecurity 有两种授权方式
- 基于权限的授权:只要拥有某权限的用户,就可以访问某个路径
- 基于角色的授权:根据用户属于哪个角色来决定是否可以访问某个路径
基于角色的授权
需要配置 SpringSecurity决定哪些角色可以访问哪些页面
http.authorizeRequests().antMatchers("/static/**").permitAll().antMatchers("/index").hasAnyRole("user", "admin") //index页面可以由user或admin访问.anyRequest().hasRole("admin") //除了上面以外的所有内容,只能是admin访问
可以创建一个实体类来接收用户的信息
@Data
public class AuthUser {String username;String password;String role;
}
修改一下用于验证用户信息的service
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {AuthUser user = mapper.getPasswordByUsername(s);if(user == null)throw new UsernameNotFoundException("登录失败,用户名或密码错误!");return User.withUsername(user.getUsername()).password(user.getPassword()).roles(user.getRole()).build();
}
基于权限的授权
基于权限的授权与角色类似,需要以`hasAnyAuthority`或`hasAuthority`进行判断
例子
.anyRequest().hasAnyAuthority("page:index")
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
AuthUser user = mapper.getPasswordByUsername(s);
if(user == null)
throw new UsernameNotFoundException("登录失败,用户名或密码错误!");
return User
.withUsername(user.getUsername())
.password(user.getPassword())
.authorities("page:index")
.build();
}
使用注解判断权限
首先需要在相应的配置类(注意只是在 Mvc 的配置类上添加,就只针对 Controller 进行过滤,因为所有的 Controller 是由 Mvc 配置类进行注册的,如果需要为 Service 或其他 Bean 也启用权限判断,则需要在 Security 的配置类上添加)上开启
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
接着就可以直接在需要添加权限验证的请求映射上添加注解
通过添加`@PreAuthorize`注解,在执行之前判断判断权限,如果没有对应的权限或是对应的角色,将无法访问页面
@PreAuthorize("hasRole('user')") //判断是否为user角色,只有此角色才可以访问
@RequestMapping("/index")
public String index(){
return "index";
}
同样的还有`@PostAuthorize`注解,它是在方法执行之后再进行拦截
@PostAuthorize("hasRole('user')")
@RequestMapping("/index")
public String index(){
System.out.println("执行了");
return "index";
}
只要是由 Spring 管理的 Bean 都可以使用注解形式来控制权限,只要不具备访问权限,那么就无法执行方法并且会返回 403 页面
@Service
public class UserService {
@PreAuthorize("hasAnyRole('user')")
public void test(){
System.out.println("成功执行");
}
}
过滤器
使用`@PreFilter`和`@PostFilter`对集合类型的参数或返回值进行过滤
@PreFilter("filterObject.equals('zzp')") //filterObject代表集合中每个元素,只要满足条件的元素才会留下
public void test(List<String> list){
System.out.println("成功执行"+list);
}
@RequestMapping("/index")
public String index(){
List<String> list = new LinkedList<>();
list.add("zzp")
service.test(list);
return "index";
}
当有多个集合时,需要使用`filterTarget`进行指定
@PreFilter(value = "filterObject.equals('lbwnb')", filterTarget = "list2")
public void test(List<String> list, List<String> list2){
System.out.println("成功执行"+list);
}
SpringSecurity:授权相关推荐
- SpringSecurity系列 - 17 SpringSecurity 授权管理
文章目录 1. 权限管理 1. 授权核心概念 2. 权限管理策略 2. 基于 URL 权限管理 3. 基于 方法 权限管理 4. 授权流程 1. FilterSecurityInterceptor#i ...
- 2022-10-1 SpringSecurity 授权
目录 1.授权 1.1权限系统的作用 1.2授权基本流程 2.授权实现 2.1限制访问资源所需权限 2.2 封装权限信息 3.从数据库查询权限信息 3.1RBAC权限模型 4 准备工作 4.1 数据库 ...
- SpringSecurity授权(访问控制)
一. 访问控制url匹配 在前面讲解了认证中所有常用配置,主要是对httpSecurity.formLogin()进行操作.而在配置类中httphttpSecurity.authorizeReques ...
- SpringSecurity - 用户动态授权 及 动态角色权限
一.SpringSecurity 动态授权 上篇文章我们介绍了SpringSecurity的动态认证,上篇文章就说了SpringSecurity 的两大主要功能就是认证和授权,既然认证以及学习了,那本 ...
- SpringSecurity 源码解析 | 加JWT 实战 之 授权流程源码分析
前两篇分析了SpringSecurity 认证源码和自定义认证流程,本片主要讲下另一个核心授权. 简单理解: 登录认证是用来确认用户是否能访问系统. 授权就是:你认证通过之后,还要检查是你是否满足资源 ...
- .anonymous springsecurity需要登陆嘛_springSecurity之java配置篇
一 前言 本篇是springSecurity知识的入门第二篇,主要内容是如何使用java配置的方式进行配置springSeciruty,然后通过一个简单的示例自定义登陆页面,覆盖原有springSec ...
- springboot集成springSecurity,jwt实现前后端分离
** ## springboot集成springSecurity,jwt实现授权,查看权限,获取用户信息:] 简单的springsecurity授权登录校验我就暂时不写了,博客太多了: 第一步:还是导 ...
- springsecurity02-springsecurity oauth2实现单点登录之-授权服务器(Authorization Service)
文章目录 oauth2简介 springboot使用springsecurity完成oauth2 授权服务 授权服务器配置指南 授权服务配置: 配置客户端详情信息(Client Details): 管 ...
- Spring Security构建Rest服务-1400-授权
安全分为 认证和授权,前边讲的都是认证,现在说授权. 前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 VIP用户等简单的角色,权限规则基本不变. 后台系统比较复杂,角色众多,权限随着业 ...
- Spring相关文章汇总篇【Spring,SpringBoot,SpringCloud等】
因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Sp ...
最新文章
- xp里删除不想要的删不掉的帐户
- 51Nod 1453 抽彩球
- 关于readdir返回值中struct dirent.d_type的取值有关问题(转)
- PT60报错(在表 $ 中午关键字$的输入项目T555Z)
- 修改 class_带你探索JVM的Class文件结构
- C# SQLite事务操作方法分析
- rest模式get,post,put,delete简单讲解
- C++ int转string以及源码
- GIT 自动转换行符的案例
- 无代码开发到底是不是伪需求?
- 公式编辑器如何打出空格
- nn.PReLU(planes)
- ISIS 协议 概述
- 【YOLOX训练部署】YOLOX训练自己的VOC数据集
- hough变换直线方程推导
- async的waterfall
- 一文详解IP地址:含义、作用、格式、分类等
- 新冠肺炎早期的10个症状 新冠肺炎1-14天症状特征
- iOS 启动优化和安装包瘦身
- Golang实现IP地址匹配