前言
任何Spring Web应用本质上只是一个 servlet。
Security Filter在HTTP请求到达你的Controller之前过滤每一个传入的HTTP请求。
一、简单的流程图
流程描述:
- 用户通过浏览器访问服务器资源。
- 经过拦截器,拦截器验证用户是否是合法用户。
- 未认证401、未授权403。
- 已认证已授权可以访问对应的资源。
二、示例代码
代码讲解:
- 首先,过滤器需要从请求中提取一个用户名/密码。它可以通过一个基本的HTTP头(请求头Header),或者表单字段(即Body参数),或者Cookie,或者路径字段等等。
- 然后,过滤器需要对用户名/密码账户进行验证,一般都是从数据库获取用户密码(已加密),与传递过来的密码(按照相关的加密算法加密),进行比对。
- 验证用户是否合法,不合法返回401,即认证失败。
- 验证用户访问资源是否授权,未授权403,即授权失败。
- 验证成功后就可以正常的访问相关授权的资源,重定向到“@Controller”或者“RestController”。
- 返回数据给用户。
- 用户查看数据。
流程基本如下图:
三、常见的内建过滤器
总结
项目启动的时候会默认初始化很多的过滤链,这些拦截类是否起作用还跟你访问的资源有关系,例如:UserNamePasswordAuthenticationFilter默认是没有起作用的,但是如果集成了 SpringSecurity从表单进行登录,则会走UserNamePasswordAuthenticationFilter拦截器,感觉拦截器这个东西就是用来处理认证和授权相关的业务。