SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!!

Spring Security

Spring Security是一个基于Java的开源框架,用于在Java应用程序提供身份验证和授权功能。它是Spring框架的一部分,可以与Spring应用程序集成为应用程序提供安全性

Spring Security提供了一套易于使用的API和配置选项,可以帮助开发人员轻松地实现身份验证和授权功能。它可以用于保护Web应用程序、REST API和方法级别的安全性

Spring Security的主要功能包括:

  1. 身份验证:Spring Security提供了多种身份验证方法,包括基于表单、基于HTTP基本认证、基于LDAP、基于CAS等。开发人员可以选择适合自己应用程序的身份验证方法来保护应用程序的安全性。

  2. 授权:Spring Security提供了灵活的权限控制机制,可以根据应用程序的需求定义细粒度的权限控制规则。开发人员可以使用注解、配置文件或数据库来定义权限规则,并根据用户角色或其他条件来限制用户的访问权限。

  3. 认证和授权支持:Spring Security可以与常见的认证和授权机制集成,包括LDAP、Active Directory、OAuth、OpenID Connect等,可以帮助开发人员轻松地实现与这些机制的集成。

  4. 安全性过滤器链:Spring Security使用过滤器链来处理请求,每个过滤器都可以执行不同的安全性操作。开发人员可以根据应用程序的需求配置不同的过滤器,并将它们链接在一起,以确保请求经过正确的安全检查。

  5. 安全性事件和监听器: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连再起飞吧

  • 31
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Security OAuth2 Authorization Server 是一个基于 Spring Security 的 OAuth2 认证服务器,用于管理 OAuth2 模式下的授权和令牌。 要将 Spring BootSpring Security OAuth2 Authorization Server 集成,可以遵循以下步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>0.2.1</version> </dependency> ``` 2. 配置认证服务器 创建一个配置类,用于配置 OAuth2 认证服务器。这个类需要继承 AuthorizationServerConfigurerAdapter 类,并且实现 configure 方法。 ```java @Configuration public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { // 配置客户端信息 clients.inMemory() .withClient("client") .secret("{noop}secret") .authorizedGrantTypes("authorization_code", "refresh_token") .redirectUris("http://localhost:8080/client") .scopes("read", "write"); } @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { // 配置安全性 security.checkTokenAccess("isAuthenticated()"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { // 配置端点 endpoints.authenticationManager(authenticationManager); } } ``` 上面的代码中,我们配置了一个名为 "client" 的客户端,使用了授权码模式和刷新令牌模式。授权成功后,将重定向到 "http://localhost:8080/client" 页面。 3. 配置 Spring Security 为了使 OAuth2 认证服务器正常工作,需要配置 Spring Security。可以创建一个配置类,用于配置 Spring Security。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 配置 HTTP 安全性 http.authorizeRequests() .antMatchers("/oauth2/authorize").authenticated() .and().formLogin().and().csrf().disable(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 配置身份认证管理器 auth.inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER"); } } ``` 在上面的代码中,我们配置了 HTTP 安全性和身份认证管理器。只有经过身份认证的用户才能访问 "/oauth2/authorize" 端点。 4. 启动应用程序 现在可以启动应用程序,并访问 "http://localhost:8080/oauth2/authorize?response_type=code&client_id=client&redirect_uri=http://localhost:8080/client" 来进行授权。授权成功后,将重定向到 "http://localhost:8080/client" 页面。 以上就是整合 Spring BootSpring Security OAuth2 Authorization Server 的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孔靠得住

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值