SpringSecurity 第三篇(常用处理器,权限校验,跨域问题)

news/2024/10/18 12:26:16/

SpringSecurity

  • 权限校验
    • 自定义权限校验方法
  • CSRF
  • 登陆成功处理器
  • 登出成功处理器
  • 注销成功处理器

权限校验

hasAuthority:方法只能够传入一个参数
hasAnyAuthority:方法可以传入多个权限,只有用户有其中任意一个权限都可以进行访问
hasRole:要求有对应的角色才可以进行访问,但是它内部会把我们出入的参数拼接上ROLE_后再去比较。所以这种情况下要用用户对应的权限也要有ROLE_这个前缀才可以
hasAnyRole:有任意的角色就可以进行访问,它内部会把我们传入的参数拼接上ROLE_后再进行比较

自定义权限校验方法

定义好权限校验方法:在@PreAuthorize注解中使用我们的方法

@Component("nihao")
public class test {public boolean hasAuthority(String authority){//获取当前用户的权限Authentication authentication = SecurityContextHolder.getContext().getAuthentication();LoginUser loginUser = (LoginUser) authentication.getPrincipal();List<String> permissions=loginUser.getPermissions();//判断用户权限集合中是否存在authorityreturn permissions.contains(authority);}
}

为了不和原有的方法冲突我们给注解加上名字

@PreAuthorize("@nihao.hasAuthority('system:dept:list')")

CSRF

CSRF是跨站请求伪造,是web常见的攻击之一
CSRF漏洞:

假设我是用户,我正常访问网站登录成功返回cookie信息,这时如果有个黑客创建了一个别的网站,网站里有个按钮,实际上点下去我们是执行访问正常网站的操作,这样黑客在其中就会诱导我们去进行一些操作

SpringSecurity去防止CSRF攻击的方式就是通过csrf_token,后端会生成一个csrf_token,前端在进行访问的时候需将这个token携带,后端会有过滤器进行校验,如果没有携带或者伪造的就部允许访问

但是现在的前后端分离的开发中就是基于token来进行认证的所以在前后端分离的开发当中本来就不用担心CSRF认证,所以我们需要在SpringSecurity配置类中的configure方法中将csrf进行关闭

//关闭csrf
http.csrf().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)

登陆成功处理器

UsernamePasswordAuthenticationFilter认证登录成功后会调用AuthenticationSuccessHandler的方法进行认证成功后的处理的,AuthenticationSuccessHandler就是登录成功处理器

我们实现AuthenticationSuccessHandler接口进行自定义操作
然后在security的配置类中的configure方法中进行配置

http.formLogin().successHandler(successHandler);
http.authorizeRequests().anyRequest().authenticated();

登出成功处理器

在UsernamePasswordAuthenticationiter进行登录认证的时候,如果认证失败了是会调用AuthenticationFailureHandler的方法进行认证失败后的处理的。AuthenticationFailureHandler就是登录失败处理器
我们实现AuthenticationFailureHandler接口进行自定义操作
然后在security的配置类中的configure方法中进行配置

http.formLogin().successHandler(successHandler).failureHandler(failureHandler);
http.authorizeRequests().anyRequest().authenticated();

注销成功处理器

同样实现LogoutSuccessHandler接口之后自定义操作
然后在security的配置类中的configure方法中进行配置

http.logout().logoutSuccessHandler(logoutSuccessHandler);

http://www.ppmy.cn/news/1432245.html

相关文章

vue2通过$refs调用子组件方法

问题描述 提示&#xff1a;这里简述项目相关背景&#xff1a; 父组件更新筛选项时&#xff0c;需要重置子组件相关参数。使用$refs时使用this.$refs[productCostTableRef].resetFn(resName) 的写法&#xff0c;发生以下报错&#xff1a; 但是该方法在调用elementui 组件时不会…

解决配置Tomcat时,找不到war和war exploded问题

解决配置Tomcat时&#xff0c;找不到war和war exploded问题 文章目录 解决配置Tomcat时&#xff0c;找不到war和war exploded问题前言一、解决方法&#xff1a;1. war exploded2. war 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一、解决方法&#xff1a;…

python合并不同文件夹相同文件名的文件

要求&#xff1a; 合并来自不同文件夹下相同csv文件&#xff0c;如&#xff1a; 三个文件夹均含有1.csv&#xff0c;2.csv&#xff0c;3.csv等等文件&#xff0c;现在对文件进行合并。思路&#xff1a;先创建一个文件名list&#xff0c;然后遍历。 python代码&#xff1a; da…

深入剖析Tomcat(三) 实现一个简易连接器

Tomcat中的servlet容器叫做Catalina&#xff0c;Catalina有两个主要模块&#xff1a;连接器与容器。在本章&#xff0c;将会建立一个连接器来增强第二章中应用程序的功能&#xff0c;用一种更好的方式来创建request与response对象。 截止文章编写日期&#xff0c;servlet规范已…

海康智能相机FTP本地存图流程

背景&#xff1a;近期一个新项目需要使用到智能相机&#xff0c;借助智能相机算法直接输出检测结果并将相机图像进行本地化保存和展示。由于申购目标智能相机未到&#xff0c;暂时使用测试智能相机。 目标智能相机型号&#xff1a;海康智能相机MV-SC3050XC 当前测试相机型号…

Spark面试整理-如何配置和管理Spark集群的资源,包括内存、CPU和存储

配置和管理Apache Spark集群的资源是确保高效运行Spark应用的关键步骤。合理的资源配置可以提高性能,避免资源浪费,并确保任务顺利执行。以下是配置和管理Spark集群资源(包括内存、CPU和存储)的一些指导原则: 内存管理 Executor内存设置:通过spark.executor.memory配置每…

加密、解密、签名、验签、数字证书、CA浅析

一、加密和解密 加密和解密应用的很广&#xff0c;主要作用就是防止数据或者明文被泄露。 加解密算法主要有两大类&#xff0c;对称加密和非对称加密。对称加密就是加密和解密的密钥都是一个&#xff0c;典型的有AES算法。非对称加密就是有公钥和私钥&#xff0c;公钥可以发布…

处理JavaScript中浮点数精度丢失的问题

如何处理JavaScript中浮点数精度丢失的问题 在使用JavaScript进行数学计算时&#xff0c;尤其是涉及浮点数时&#xff0c;经常会遇到精度丢失的问题。这是由于JavaScript使用IEEE 754标准的双精度浮点格式表示数字&#xff0c;这种表示方式在处理特别大或特别小的数时会不够精…