Spring-Security基础知识如门

基本概念

什么是认证

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。

系统为什么要认证?

认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。

认证:用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。

什么是会话

用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于 session 方式、基于 token 方式等。

什么是授权

还拿微信来举例子,微信登录成功后用户即可使用微信的功能,比如,发红包、发朋友圈、添加好友等,没有绑定银行卡的用户是无法发送红包的,绑定银行卡的用户才可以发红包,发红包功能、发朋友圈功能都是微信的资源即功能资源,用户拥有发红包功能的权限才可以正常使用发送红包功能,拥有发朋友圈功能的权限才可以使用发朋友圈功能,这个根据用户的权限来控制用户使用资源的过程就是授权。

为什么要授权?

认证是为了保证用户身份的合法性,授权则是为了更细粒度的对隐私数据进行划分,授权是在认证通过后发生的,控制不同的用户能够访问不同的资源。

授权: 授权是用户认证通过根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

RBAC

基于角色的访问控制

RBAC基于角色的访问控制(Role-Based Access Control)是按角色进行授权,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问控制流程如下:

if(主体.hasRole("总经理角色id")){
    查询工资
}

问题:如果查询工资的角色变化为总经理和部门经理,还有项目经理可访问,此时就需要修改判断逻辑

if(主体.hasRole("总经理角色id") || 主体.hasRole("部门经理角色id") 
|| 主体.hasRole("项目经理角色id")){
    查询工资
}

根据上边案例发现,当需要修改角色的权限时就需要修改授权的相关代码,系统可拓展性差

基于资源的访问控制

按资源进行授权(Resource-Based Access Controller)

代码案例:

if(主体.hasPermission("查询公司权限标识")){
    查询工资
}

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化,都不需要修改授权代码,系统可扩展性强

SpringSecurity

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。

SpringSecurity的核心功能:

用户认证(Authentication):系统判断用户是否能登录

用户授权(Authorization):系统判断用户是否有权限去做某些事情

SpringSecurity 特点:

Spring 技术栈的组成部分,与Spring 无缝整合。

全面的权限控制,能提供完整可扩展的认证和授权支持保护

专门为 Web 开发而设计。

重量级,需要引入各种家族组件与依赖

SpringSecurity 快速入门

创建springboot项目

对应的pom文件中的核心jar


    org.springframework.boot
    spring-boot-starter-security

运行项目显示的页面

Spring-Security基础知识如门_第1张图片

该页面在登录的时候默认的用户名是user密码显示在控制台

Spring-Security基础知识如门_第2张图片

输入用户名和密码后即可访问成功。

权限管理中的相关概念:

名称

英文名称

概念

主体

principal

使用系统的用户或设备或从其他系统远程登录的用户等等

认证

authentication

权限管理系统(通过登录操作)确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁。

授权

authorization

给用户分配权限:将操作系统的“权力”“授予”“主体”,这样主体就具备了操作系统中特定功能的能力。

入门案例及权限实战

http://t.csdnimg.cn/xf8nU

你可能感兴趣的:(JAVA,spring,java,后端)