SpringSecurity学习之路6-基本原理{基于表单的验证}

在之前的所有程序中,只要知道了访问地址就可以对其进行访问。接下来使用SpringSecurity来为程序添加保护。主要学习到的有:身份认证(你是谁)、授权(你能做什么)和攻击保护(防止伪造身份)。

先看看SpringSecurity的基本原理:通过Filter过滤器链来实现安全验证,执行逻辑如下图:

首先会判断请求体中是否包含用户名、密码信息,如果有那就会被第一个绿色Filter处理。否则,就会再判断是否包含Basic,将其交给第二个绿色Filter处理。绿色的FIlter是可以被我们自定义的,其他颜色的过滤器是不能被更改、自定义的。

之后请求会进入到黄色的FilterSecurityInterceptor中,这是最后一道关卡。它将会验证该请求是否已经通过了UsernamePassword或Basic验证,如果没有通过,就会抛出相应的异常信息,异常信息会被蓝色的ExceptionTranslationFilter所处理,将请求打回到验证界面。验证通过后就可以调用Rest服务。

接下来通过查看源码,打断点运行,访问程序来实际看下SpringSecurity的运行流程。

FilterSecurityInterceptor类:

用来验证的主要是第124行代码,我们为其打上断点。

ExceptionTranslationFilter类:

这个类的主要代码都在catch块里面

我们在第123行打上断点,看其捕获的异常是啥。

UsernamePasswordAuthenticationFilter类:

可以看到这个类只处理以post方式提交的/login请求。

主要来进行验证的部分代码如下

 接下来运行程序,输入地址栏之后由于请求体中不存在username、password或basic,所以会直接进入到黄色FilterSecurityInterceptor之中

由于未通过验证,所以我们的请求体不能通过最后一道关卡,黄色部分会抛出异常。F6接着执行后便会进入到蓝色的ExceptionTranslationFilter中

 当它捕获到异常之后便会根据异常信息做相应处理,由于我在这里开启的是form验证,所以在浏览器端会显示如下页面:

 输入user/默认密码(见控制台)后,会进入到UsernamePasswordAuthenticationFilter之中,

接着运行,会再次进入到黄色FilterSecurityInterceptor中,因为已经通过了UsernamePasswordAuthenticationFilter的验证,所以可以通过最后一道关卡,进入到Result API中,

 至此,关于SpringSecurity的运行流程全部结束。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值