java 发送带basic认证的http post请求实例代码_130 Spring Security安全认证授权

1. PasswordEncoder 密码解析器详解

Spring Security 要求容器中必须有 PasswordEncoder 实例。所以当

自定义登录逻辑时要求必须给容器注入 PaswordEncoder 的 bean 对象

接口介绍:

encode():把参数按照特定的解析规则进行解析。

matches()验证从存储中获取的编码密码与编码后提交的原始密

码是否匹配。如果密码匹配,则返回 true;如果不匹配,则返回 false。

第一个参数表示需要被解析的密码。第二个参数表示存储的密码。

upgradeEncoding():如果解析的密码能够再次进行解析且达到更

安全的结果则返回 true,否则返回 false。默认返回 false。

bece9776fe5973bf66601d6446c1471e.png

内置解析器介绍

在 Spring Security 中内置了很多解析器。

0274276d1f947995984e792b4876604d.png

BCryptPasswordEncoder 简介

BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析

器,平时多使用这个解析器。

BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现。是

基于 Hash 算法实现的单向加密。可以通过 strength 控制加密强度,

默认 10.

代码演示

在 项 目 src/test/java 下 新 建 com.bjsxt.MyTest 测 试

BCryptPasswordEncoder 用法。

@SpringBootTest

2. 自定义登录逻辑

当 进 行 自 定 义 登 录 逻 辑 时 需 要 用 到 之 前 讲 解 的

UserDetailsService 和 PasswordEncoder。但是 Spring Security 要求:当进行自定义登录逻辑时容器内必须有 PasswordEncoder 实例。所以不

能直接 new 对象。

编写配置类

新建类 com.bjsxt.config.SecurityConfig 编写下面内容

@Configuration

自定义逻辑

在 Spring Security 中实现 UserDetailService 就表示为用户详情服

务。在这个类中编写用户认证逻辑。

@Service

查看效果

重启项目后,在浏览器中输入账号:admin,密码:123。后可以

正确进入到 login.html 页面。

3. 自定义登录页面

虽然 Spring Security 给我们提供了登录页面,但是对于实际项目

中,大多喜欢使用自己的登录页面。所以 Spring Security 中不仅仅提

供了登录页面,还支持用户自定义登录页面。实现过程也比较简单,

只需要修改配置类即可。

编写登录页面

编写登录页面,登录页面中<form>的 action 不编写对应控制器也

可以。

<!DOCTYPE html>

修改配置类

修改配置类中主要是设置哪个页面是登录页面。配置类需要继承

WebSecurityConfigurerAdapte,并重写 configure 方法。

successForwardUrl()登录成功后跳转地址

loginPage() 登录页面

loginProcessingUrl 登录页面表单提交地址,此地址可以不真实存

在。

antMatchers():匹配内容

permitAll():允许

@Configuration

编写控制器

编写控制器,当用户登录成功后跳转 toMain 控制器。编写完成

控制器后编写 main.html。页面中随意写上一句话表示 main.html 页面

内容即可。而之前的/login 控制器方法是不执行的,所以可以删除了。

@Controller

4. 失败跳转

表单处理中成功会跳转到一个地址,失败也可以跳转到一个地址中。

编写页面

在 src/main/resources/static 下新建 fail.html 并编写如下内容.

<!DOCTYPE html>

修改表单配置

在配置方法中表单认证部分添加 failureForwardUrl()方法,表示登

录失败跳转的 url。此处依然是 POST 请求,所以跳转到可以接收 POST

请求的控制器/fail 中。

// 表单认证

添加控制器方法

在控制器类中添加控制器方法,方法映射路径/fail。此处要注意:

由于是 POST 请求访问/fail。所以如果返回值直接转发到 fail.html 中,

及时有效果,控制台也会报警告,提示 fail.html 不支持 POST 访问方式。

@PostMapping

设置 fail.html 不需要认证

认证失败跳转到 fail.html 页面中,所以必须配置 fail.html 不需要

被认证。需要修改配置类中内容.

// url 拦截

5. 设置请求账户和密码的参数名

源码简介

当进行登录时会执行 UsernamePasswordAuthenticationFilter 过滤器。

usernamePasrameter:账户参数名

passwordParameter:密码参数名

postOnly=true:默认情况下只允许 POST 请求。

6750fcb549433545673410e14f036503.png

修改配置

// 表单认证

修改页面

修改 login.html

<

6. 自定义登录成功处理器

源码分析

使用 successForwardUrl()时表示成功后转发请求到地址。内部是

通过 successHandler()方法进行控制成功后交给哪个类进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值