一:搞清楚认证与权限
1.1:什么是认证?
认证就是身份的核实,在我们生活中无处不在。譬如说你坐高铁需要拿着你的身份证以及你的英俊漂亮的脸,过闸机时那个操作相对于铁路局的操作系统而言就是需要对你进行认证,检查你是否有买当天的票,检查你与身份证以及票是否是同一个人。当我们使用别人的身份证进去时就亮红灯,不给进。这就是认证。
1.2:什么是权限?
接着上面的认证,咱们进去候车厅之后,然后等车,上车,接着找自己的位置。那么你是坐一等坐呢?还是二等座?亦或是三等座(站票)?这就取决于你买票的时候所选的坐席以及付出的money了(三等座于二等座同价不必抬杠)。你能坐到什么的位置就是你的权限。
1.3:小结
认证就是对身份的校验,权限就是你这个身份所拥有那些操作。
1.4:RBAC(基于角色的访问控制)
其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。
二:Spring-Security(安全认证框架)
1.1:什么是Spring-Security?
Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我们来简化认证和授权的过程。官网:Spring-Security
- SpringSecurity是Spring家族的一个安全框架, 简化我们开发里面的认证和授权过程, (登陆, 访问url时的权限控制 secuirty帮我们做了)
- SpringSecurity内部封装了Filter(只需要在web.xml容器中配置一个过滤器–代理过滤器,真实的过滤器(12个)在spring的容器中配置)
- 常见的安全框架
1: Spring的 SpringSecurity 配置复杂 有个好老爸(spring) 无缝整合 链式模式
2: Apache的Shiro http://shiro.apache.org/ 比较简单 apache 写整合 外观者模式
1.2:小结
为什么要用spring-security?那么麻烦的配置咱们还用它作甚?不用不行啊,因为企业中谁不用spring的东西啊?sping已经成为了企业的春天了。正因如此,为了更好的使用安全框架就用spring-security了。
三:Spring-Security入门
3.1:目标
使用Spring Security进行控制: 网站(一些页面)需要登录才能访问(认证)
3.2:环境
3.2.1:idea、tomcat、maven
1:在idea中创建maven工程的web项目,pom.xml文件引入spring以及spring-secruity依赖,我这里引入了spring的多个依赖,后面用到就不用再引入了。
<spring.security.version>5.0.5.RELEASE</spring.security.version>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency