Spring security
文章平均质量分 68
Spring security
五月CG
蜗牛没有窝~~
展开
-
Spring Security——13,认证成功&&失败&&注销成功处理器
测试一下:输入正确的账号密码,登录成功返回认证成功测试一下:输入错误的账号密码,登录失败返回认证失败测试一下:登录成功之后,访问注销的接口。原创 2024-04-08 21:06:54 · 714 阅读 · 0 评论 -
Spring Security——12,CSRF&&其他权限控制
我们可以发现CSRF攻击依靠的是cookie中所携带的认证信息。但是在前后端分离的项目中我们的认证信息其实是token,而token并不是存储中cookie中,并且需要前端代码去把token设置到请求头中才可以,所以CSRF攻击也就不用担心了。后端会生成一个csrf_token,前端发起请求的时候需要携带这个csrf_token,后端会有过滤器进行校验,如果没有携带或者是伪造的就不允许访问。CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一。原创 2024-04-08 18:50:53 · 456 阅读 · 0 评论 -
Spring Security——11,自定义权限校验方法
一键三连有没有捏~~我们也可以定义自己的权限校验方法,在@PreAuthorize注解中使用我们的方法。自定义一个权限检验方法:在SPEL表达式中使用 @ex相当于获取容器中bean的名字未ex的对象。然后再调用这个对象的hasAuthority方法,权限方法换成自己的测试一下,也是没有问题的。原创 2024-04-07 22:14:23 · 201 阅读 · 0 评论 -
Spring Security——10,其他权限校验方法
hasAuthority方法实际是执行到了SecurityExpressionRoot的hasAuthority,大家只要断点调试既可知道它内部的校验原理。这里我们先不急着去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学习其他方法你就更。hasAnyAuthority方法可以传入多个权限,只有用户有其中任意一个权限都可以访问对应资源。并且我们也可以选择定义校验方法,实现我们自己的校验逻辑。hasRole要求有对应的角色才可以访问,但是它内部会把我们传入的参数拼接上。原创 2024-04-07 22:08:08 · 391 阅读 · 0 评论 -
Spring Security——09,解决跨域
因为它不是浏览器,所以我们要找一个前端的项目,就随便找了一个vue工程。由于我们的资源都会收到SpringSecurity的保护,所以想要跨域访问还要让SpringSecurity运行跨域访问。修改一下登录页面,认证登录成功之后,把返回的token接收,存入localStorage。前后端分离项目,前端项目和后端项目一般都不是同源的,所以肯定会存在跨域请求的问题。然后看一下,响应,都没有问题,OK,这个账号是有这个权限的。然后测试一下,登录成功,解决跨域请求,拿到token。填入一个正确的密码,认证成功。原创 2024-04-07 22:01:27 · 999 阅读 · 0 评论 -
Spring Security——06,授权_封装权限信息
我们前面在写UserDetailsServiceImpl的时候说过,在查询出用户后还要获取对应的权限信息,封装到UserDetails中返回。实际上项目中用的都是基于注解的形式配置方式,基于配置方式的主要是用来配置静态资源,而前后端分离,就没有什么静态资源了,所以用的都是注解。在security中,它去获取权限信息的时候,是调用UserDetails接口中的getAuthorities方法。所以我们还需要在后台进行用户权限的判断,判断当前用户是否有相应的权限,必须具有所需权限才能进行相应的操作。原创 2024-04-07 21:45:21 · 925 阅读 · 0 评论 -
Spring Security——08,自定义失败处理
一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足一键三连有没有捏~~我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity的异常处理机制。原创 2024-04-07 21:34:15 · 444 阅读 · 0 评论 -
Spring Security——07,授权_从数据库查询权限信息
RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。有一个插件,插件的名称叫做MybatisX,它可以在我们写完MenuMapper后,帮我们生产对应的XML文件,还有方法所对应的标签。因为redis存放的是旧的,不是最新的。便于理解,前面的权限都是写死的,从这里开始是查询数据库的。登录成功之后,访问hello接口,返回的是403。sys_role_menu 角色权限关联表。sys_user_role用户角色表。sys_role 角色表。sys_user用户表。原创 2024-04-07 21:32:22 · 449 阅读 · 0 评论 -
Spring Security——05,退出登录
我们只需要定义一个登陆接口,然后获取SecurityContextHolder中的认证信息,删除redis中对应的数据即可。1、LoginController 添加一个方法 logout() 退出登录。因为redis已经删除了,所以去找的时候,就会为null,返回用户未登录。退出成功了之后,拿之前登录成功的老token,访问一下hello接口。先登录,登录了之后,拿到返回的token去访问退出接口。测试退出了,老token是否还可以访问hello接口。然后看一下后台报的是什么错误。原创 2024-04-04 23:19:09 · 167 阅读 · 0 评论 -
Spring Security——04,认证_校验
完成过滤器之后,我们要去指定一下过滤器的位置,在哪里进行过滤,我们把它放在UsernamePasswordAuthenticationFilter之前的位置。我们想让他访问成功,就把之前登录成功的token拿过来,作为请求头,就可以了。项目重新启动了之后,老token就不能登录了,必须重新登录,要新的token。然后,一直放行,放行到后面,肯定是一个认证失败的结果。现在,我们的登录接口,请求头是没有token的。老token登录报错了,报的是语法错误,乱码了。看一下,我们的idea,已经到断点这里了。原创 2024-04-04 23:18:11 · 257 阅读 · 0 评论 -
Spring Security——03,认证_登录
当我们输入密码1234后,Spring Security会根据存储的密码密文解析出加密算法和盐值,然后它会根据这个加密算法和盐值将你输入的密码加密,最后才会将生成的密码密文与存储的密码密文进行比较。每次加密的随机盐会被保存在一个hash中的,每次加密时候,密文中都包含了随机盐的基本信息,所以他能根据这个基本信息找到保存在hash上的那个随机盐。所以是一一对应的关系。它会调用我们之前自定义的UserDetailsServiceimpl里面的方法进行一个校验,会根据我们传过去的用户名去查询数据库,然后再返回。原创 2024-04-02 21:15:55 · 1588 阅读 · 0 评论 -
Spring Security——02,认证流程分析、解决
第一次登录之后,生产一个token,返回到客户端,还有用userid作为key,用户信息作为value存入redis中,然后呢,下一次再进行登录,我们解析前端传过来的token,得到userid,就不用每次一都访问我们的服务器数据库,我们可以查询redis,不查询数据库。SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。**:**负责权限校验的过滤器。入门案例中的过滤器。原创 2024-04-02 21:15:18 · 357 阅读 · 0 评论 -
Spring Security——01,神速入门
是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。一般来说中大型的项目都是使用来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。一般Web应用的需要进行认证和授权。认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户授权:经过认证后判断当前用户是否有权限进行某个操作而认证和授权也是SpringSecurity作为安全框架的核心功能。原创 2024-04-01 18:26:12 · 397 阅读 · 0 评论 -
新版本Spring Security 2.7 + 用法,直接旧正版粘贴
WebSecurityConfigurerAdapter 已经过时了,新版本已经不用这个了。使用@EnableWebSecurity注解。原创 2023-11-17 10:17:19 · 477 阅读 · 0 评论