SpringSecurity:Spring家族的安全管理框架
主要功能:认证 和 授权
功能流程介绍参考: Spring Security 详解_律二萌萌哒的博客-优快云博客_springsecurity
Spring Security配置相关
关于SpringSecurity配置的文件src/main/java/com/ruoyi/framework/config/SecurityConfig.java
密码加密
底层:
关于SpringSecurity的加密:https://blog.youkuaiyun.com/qfxietian/article/details/120995231
关于SHA256:https://blog.youkuaiyun.com/u011583927/article/details/80905740
String encode(CharSequence rawPassword)函数对密码进行加密,因为salt的存在,所以输入相同的情况下输出结果也不同。
想要匹配验证只能使用Boolean matches(CharSequence rawPassword,String encodePassword)函数。
登陆配置、退出配置
关于登录、推出方法的声明都在这里,至于功能实现,直接Ctrl左键进入相应的实现类中查看,比如登录功能在SysLoginService.java
ruoyi.framework.security.handle.LogoutSuccessHandlerImpl.java
登录流程:
1.验证账号密码验证码
2.验证菜单
3.验证权限
退出流程:
1.删除登录用户的缓存
2.记录退出动作日志
3.URL重定向至/logout并刷新
如果在登录或者退出的时候需要新加业务逻辑,就需要在相应的文件里进行实现。
权限与权限注解
SpringSecurity中使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。当前用户是否拥有访问当前资源所需的权限。
用户的权限分为角色权限(roles)和菜单权限(perms)
在login的时候会调用permissionService.getMenuPermission(user)来获取登录用户的菜单权限列表
这个函数实现在:src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
权限注解的文件位置:src/main/java/com/ruoyi/framework/web/service/PermissionService.java
权限注解主要用于Controller层进行操作时对于登录用户是否有进行这个操作的权限进行一个验证
例如:
@PreAuthorize("@ss.hasPermi('system:user:export')")
验证登录用户是否拥有system:user:export权限。