目录

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:授权相关推荐

  1. SpringSecurity系列 - 17 SpringSecurity 授权管理

    文章目录 1. 权限管理 1. 授权核心概念 2. 权限管理策略 2. 基于 URL 权限管理 3. 基于 方法 权限管理 4. 授权流程 1. FilterSecurityInterceptor#i ...

  2. 2022-10-1 SpringSecurity 授权

    目录 1.授权 1.1权限系统的作用 1.2授权基本流程 2.授权实现 2.1限制访问资源所需权限 2.2 封装权限信息 3.从数据库查询权限信息 3.1RBAC权限模型 4 准备工作 4.1 数据库 ...

  3. SpringSecurity授权(访问控制)

    一. 访问控制url匹配 在前面讲解了认证中所有常用配置,主要是对httpSecurity.formLogin()进行操作.而在配置类中httphttpSecurity.authorizeReques ...

  4. SpringSecurity - 用户动态授权 及 动态角色权限

    一.SpringSecurity 动态授权 上篇文章我们介绍了SpringSecurity的动态认证,上篇文章就说了SpringSecurity 的两大主要功能就是认证和授权,既然认证以及学习了,那本 ...

  5. SpringSecurity 源码解析 | 加JWT 实战 之 授权流程源码分析

    前两篇分析了SpringSecurity 认证源码和自定义认证流程,本片主要讲下另一个核心授权. 简单理解: 登录认证是用来确认用户是否能访问系统. 授权就是:你认证通过之后,还要检查是你是否满足资源 ...

  6. .anonymous springsecurity需要登陆嘛_springSecurity之java配置篇

    一 前言 本篇是springSecurity知识的入门第二篇,主要内容是如何使用java配置的方式进行配置springSeciruty,然后通过一个简单的示例自定义登陆页面,覆盖原有springSec ...

  7. springboot集成springSecurity,jwt实现前后端分离

    ** ## springboot集成springSecurity,jwt实现授权,查看权限,获取用户信息:] 简单的springsecurity授权登录校验我就暂时不写了,博客太多了: 第一步:还是导 ...

  8. springsecurity02-springsecurity oauth2实现单点登录之-授权服务器(Authorization Service)

    文章目录 oauth2简介 springboot使用springsecurity完成oauth2 授权服务 授权服务器配置指南 授权服务配置: 配置客户端详情信息(Client Details): 管 ...

  9. Spring Security构建Rest服务-1400-授权

    安全分为 认证和授权,前边讲的都是认证,现在说授权. 前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 VIP用户等简单的角色,权限规则基本不变. 后台系统比较复杂,角色众多,权限随着业 ...

  10. Spring相关文章汇总篇【Spring,SpringBoot,SpringCloud等】

      因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Sp ...

最新文章

  1. xp里删除不想要的删不掉的帐户
  2. 51Nod 1453 抽彩球
  3. 关于readdir返回值中struct dirent.d_type的取值有关问题(转)
  4. PT60报错(在表 $ 中午关键字$的输入项目T555Z)
  5. 修改 class_带你探索JVM的Class文件结构
  6. C# SQLite事务操作方法分析
  7. rest模式get,post,put,delete简单讲解
  8. C++ int转string以及源码
  9. GIT 自动转换行符的案例
  10. 无代码开发到底是不是伪需求?
  11. 公式编辑器如何打出空格
  12. nn.PReLU(planes)
  13. ISIS 协议 概述
  14. 【YOLOX训练部署】YOLOX训练自己的VOC数据集
  15. hough变换直线方程推导
  16. async的waterfall
  17. 一文详解IP地址:含义、作用、格式、分类等
  18. 新冠肺炎早期的10个症状 新冠肺炎1-14天症状特征
  19. iOS 启动优化和安装包瘦身
  20. Golang实现IP地址匹配

热门文章

  1. 时钟周期是干什么的?底层原理是什么?
  2. 滤波算法、中值和均值滤波区别
  3. QQ好友列表树形列表简单实现方式
  4. chrome插件莫名消失【已解决】
  5. 5G/NR中RRC的三种状态(idle, active, inactive)
  6. cannot delete inactive domain with nvram
  7. base64真正的作用和意义
  8. 百万冲顶 获取复活币
  9. 微信小程序开发 | API应用案例(下)
  10. react+antd的后台管理项目模板