Spring Security简介

坐标

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
  <version>5.1.13.RELEASE</version>
</dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId>
<version>5.1.13.RELEASE</version>
</dependency>

认证和授权概念

问题1:在生产环境下我们如果不登录后台系统可以完成后台的所有功能操作吗?

答案显然是否定的,要操作这些功能必须首先登录到系统才可以。

问题2:是不是所有用户,只要登录成功就都可以操作所有功能呢?

答案是否定的,并不是所有的用户都可以操作这些功能。不同的用户可能拥有不同的权限,这就需要进行授权了。

认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。

权限模块数据模型

RABC 模型

基于角色的权限访问控制(Role-Based Access Control),在RBAC中权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求而赋予新的权限,而权限也可根据需要而从某角色中回收。

RBAC支持公认的安全原则:最小特权原则、责任分离原则和数据抽象原则。

  • 最小特权原则,在RBAC模型中可以通过限制分配给角色权限的多少和大小来实现,分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要就可以。

  • 责任分离原则,是在RBAC模型中可以通过在完成敏感任务过程中分配两个责任上互相约束的两个角色来实现,例如在清查账目时,只需要设置财务管理员和会计两个角色参加就可以。

  • 数据抽象原则,是借助于抽象许可权这样的概念实现的,如在账目管理活动中,可以使用信用、借方等抽象许可权,而不是使用操作系统提供的读、写、执行等具体的许可权。RBAC并不强迫实现这些原则。

Spring-Security认证流程

用户一次完整的登录验证和授权,是一个请求经过 层层拦截器从而实现权限控制,整个web端配置为DelegatingFilterProxy(springSecurity的委托过滤其代理类 ),它并不实现真正的过滤,而是所有过滤器链的代理类,真正执行拦截处理的是由spring 容器管理的各个filter bean组成的filterChain.

  • 拦截

  • 认证与授权

认证(Authentication):确定一个用户的身份的过程。授权(Authorization):判断一个用户是否有访问某个安全对象的权限。下面讨论一下spring security中最基本的认证与授权。

首先明确一下在认证与授权中关键的是UsernamePasswordAuthenticationFilter:该过滤器用于拦截我们表单提交的请求(默认为/login),进行用户的认证过程。

 授权登录的请求,UsernamePasswordAuthenticationFilter将拦截请求进行认证。

AuthenticationProvider中维护了UserDetailsService,我们使用内存中的用户,默认的实现是InMemoryUserDetailsManager。UserDetailsService用来查询用户的详细信息,该详细信息就是UserDetails。UserDetails的默认实现是User。查询出来UserDetails后再对用户输入的密码进行校验。校验成功则将UserDetails中的信息填充进Authentication中返回。校验失败则提醒用户密码错误。

 配置

 xml     https://github.com/yourZhang/study_java/tree/master/Security01

全注解  https://github.com/yourZhang/study_java/tree/master/Security02-anno

原文地址:https://www.cnblogs.com/xiaozhang666/p/13794865.html