注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!!
Spring Security
Spring Security是一个基于Java的开源框架,用于在Java应用程序中提供身份验证和授权功能。它是Spring框架的一部分,可以与Spring应用程序集成,为应用程序提供安全性。
Spring Security提供了一套易于使用的API和配置选项,可以帮助开发人员轻松地实现身份验证和授权功能。它可以用于保护Web应用程序、REST API和方法级别的安全性。
Spring Security的主要功能包括:
-
身份验证:Spring Security提供了多种身份验证方法,包括基于表单、基于HTTP基本认证、基于LDAP、基于CAS等。开发人员可以选择适合自己应用程序的身份验证方法来保护应用程序的安全性。
-
授权:Spring Security提供了灵活的权限控制机制,可以根据应用程序的需求定义细粒度的权限控制规则。开发人员可以使用注解、配置文件或数据库来定义权限规则,并根据用户角色或其他条件来限制用户的访问权限。
-
认证和授权支持:Spring Security可以与常见的认证和授权机制集成,包括LDAP、Active Directory、OAuth、OpenID Connect等,可以帮助开发人员轻松地实现与这些机制的集成。
-
安全性过滤器链:Spring Security使用过滤器链来处理请求,每个过滤器都可以执行不同的安全性操作。开发人员可以根据应用程序的需求配置不同的过滤器,并将它们链接在一起,以确保请求经过正确的安全检查。
-
安全性事件和监听器:Spring Security提供了一套事件和监听器机制,可以在用户认证和授权过程中触发不同的事件。开发人员可以注册自己的监听器,以便在特定事件发生时执行自定义的逻辑。
总结来说,Spring Security是一个功能强大且易于使用的安全框架,可以帮助开发人员轻松地实现身份验证和授权功能,并提供了许多灵活的配置选项和扩展点,以满足各种应用程序的安全需求。
1、准备工作
1)浏览官网
2)创建项目
3)导入静态资源
4)关闭模板引擎
2、构造controller类
- 实现链接访问静态资源与页面
3、用户认证和授权
- 导入security依赖
- 浏览官方文档
- 自定义的操作:
1) 自定义SecurityConfig类
- 用来自定义配置springsecurity
点进去看一下源码:
看一些重写的方法:
①重写configure(WebSecurity web)授权方法
protected void configure(HttpSecurity http) throws Exception
- 没有权限,跳到登录页面
- 点进去看一下formlogin的源码
默认会跳转回:/login首页,否则 /login?error
- authorizeRequests(): 请求权限
- antMatchers(“”;“”):增加地址
- hasRole():指定访问用户
- and():连接
- formLogin:有权限就登陆,没权限就踢出去
默认是 name=username与name=password,不可以更改
②重写configure(AuthenticationManagerBuilder auth)方法:(用户认证
出现错误:
- 看一下源码,然后添加加密方法:
- 在错误中,读源码,找到实现方法
4、注销及权限管理
1)在数据库中获得账号和密码
2)注销功能
logout():会默认跳到(“/login”)
- logout后会调用许多方法,去删除一些配置:cookies、HttpSession
①注销的链接 “/logout”
②添加注销按钮(添加超链接)
问题:图标不对
③上网下载图标
Semantic UI 中文网→表单→图标→复制名字→粘贴修改对应的样式
- 复制名字即可,后面的icon,不可以去掉
- springboot自动提供logout页面功能
④注销功能跳到首页
直接调用后面的logoutSuccessUrl():成功登出,即可
- 常规写法
无效的
- 有效
注意:
3)登录后用户只可以看到规定的内容
①先浏览maven仓库网页
②添加依赖
注:
③添加命名空间
注:
⑤修改首页的配置
引入 sec:
⑥遇到问题1:版本不支持
- 改低版本(没做)
- 原生的登录界面html
⑦遇到问题2:登录注销功能失败
-
index.html页面写错了,需要不断测试
- principal.getPassword()没解决
- 结论:不能用principle方法,这个principle是一个令牌,设计CSRF防护功能
⑧关闭自动配置的CSRF防护功能
- 用get请求会出现登录和注销错误的情况,这是因为引入了thymeleaf-security依赖后,springboot自动装配的,需要关掉,才能使用
如果有用到表单post,post提交修改数据的请求也不行,因为CSRF功能默认开启后,会拦截所有涉及数据修改方式的请求,需要配置携带CSRF Token令牌,才行
不同权限的用户,显示不同内容,实现动态菜单的效果
- 导入thymeleaf-security依赖后,可以在前端做一些后端的操作
- 然后判断是否显示一些东西
5、记住我及首页定制
1)实现rememberMe
- 关掉浏览器,看一下,能不能直接进去登录后的页面
①通过审查元素理解rememberMe
- 开启一次浏览器代表一次会话,虽然清除了cookie,但是服务端还连接着,需要重启服务器后才可以看到,清除了cookie后的效果
②实现首页定制
成功和失败的login页面
③遇到问题1
尝试1:
- 表单跳转的链接(“/toLogin”)和loginpage(“/toLogin”)一致,就可以啦?????为什么会跳转到index页面(已解决)
- 表单:(“/toLogin”)method=“post”,会跳到这里来
- 解决:
- POST
尝试2:
- 表单action改为: /login
- 添加loginProcessingUrl(“/login”)
- 表单的数据接收不到
- login页面怎么接受密码的账号的
- 点开源码看一下
- 默认的参数,改了会接收不到,需要自定义
- 自定义接收参数
2)在首页添加rememberMe功能
①添加rememberMe选框
②修改后端rememberMe
- 看源码
rememberMeParameter:自定义接收前端的参数
- 修改排版
注意:
总结:
主要:用户认证和授权、注销和权限管理、记住我和首页定制
1.引入springsecurity框架后,这个比之前写拦截器等简便很多。
2.Shiro面试会问,springsecurity默认会的
3.未解决的问题:
①表单跳转的链接(“/toLogin”)和loginpage(“/toLogin”) 一致,就可以啦?????为什么会跳转到index页面。
已解决:
- 扩展:要使用表单提交的数据,需要表单申明 默认请求方式post(特殊请求,特殊接收),请求路径:“/login”, 当然,后台需要post来接收请求。
SpringBoot学习(五)-Spring Security配置与应用 开发的学习笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧