Spring Security 权限校验

999 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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 来获取用户的上下文信息。