一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 18 天,点击查看活动详情。
夜来风雨声,花落知多少。
1 前言
在项目开发过程中,会经常使用到权限校验的问题,通常项目中配置的都是 Srping Security 或者是使用 Shiro 来进行权限校验。在本文中将着重讲解 Srping Security, 其是基于 Srping AOP 和 Servlet 过滤器的安全校验框架,提供了全面的安全解决方案,其使用比 Shiro 较重,但是能提供请求和方法调用级别的身份认证和授权,这是非常重要的。
2 基本认识
在 Spring 项目开发中,一般都是采用 xml 的方式进行配置,从一个基本的配置案例来开始分析:
第一部分主要包括过滤配置访问,配置页面的拦截规则,同源策略和配置的定义页面,在其中也包含退出的地址和 csrf 。
第二部分是认证管理器,主要是基本的配置模式和使用 userService 的模式进行鉴权,以及加密的模式。
从上述配置可以看到其基本结构,除了 xml 的配置之外,还可以使用 java 配置文件的方式来处理配置。如图可以得到以下的基本内容:
- 1 核心部分为 Web 和 Http 安全。通过建立过滤器和 spring bean 来实现框架认证。 当访问受保护的 URL 时会将用户引入登录界面或是错误提示界面。
- 2 业务的对象和方法鉴定,控制方法访问权限的。
- 3 AuthenticationManager 处理来自于框架其他部分的认证请求。
- 4 AccessDecisionManager 是方法的安全提供访问决策。在 spring 中可以通过自定义 bean 来实现 AccessDecisionManager。
- 5 AuthenticationProvider 是 AuthenticationManager 是用来进行用户验证。
- 6 UserDetailsService 跟 AuthenticationProvider 的核心,把用户校验交给业务来实现。
3 配置文件加载
在前文中已经配置了 security.xml ,在 spring 中可以通过 web.xml 文件中 context-param 配置来加载配置文件,也可以将 其配置统一放在 applicationContext.xml 文件中。
通常情况下,Spring 的配置文件如下所示:
- 1 首先要配置的是字符集,防止 web 程序乱码
- 2 主要是 mvc 的核心配置以及 security 的核心过滤器
4 工具类
在分享了基本的用法后,在最后也会有类似于获取当前上下文的方法,即:
// 获取上下文信息
SecurityContextHolder.getContext().getAuthentication()
在之前讲解事务 AOP, springboot 小技巧的时候,也讲述了其中获取上下文的方法,讲到这里,其实都是为了获取上下文信息。
5 总结
在本文中讲述了 Spring Security 的相关用法以及在项目中的配置,最后讲述了 SecurityContextHolder 来获取用户的上下文信息。