1.什么是权限管理
基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
2.什么是身份认证
身份认证就是判断一个用户是否为合法用户的处理过程。最简单的身份认证就是通过账户名和密码与系统中存储的账户和密码比对,看是否一致。我们日常使用的指纹识别,刷卡验证等都属于身份认证
3.什么是授权
授权,顾名思义就是授予权限或权力,授权是在身份认证后进行的,身份认证通过后,需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
4认证授权框架有哪些?
shiro框架、spring security框架,这两款框架是现在市面上比较流行的;
5.什么是shiro框架
官网给的解释是:
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.
翻译过来就是:
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和session会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架spring security,Shiro 要简单的多.
百度百科给的概念:
Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
`
6.为什么使用shiro
Shiro可以很方便兼容我们所使用的javaSE和JavaEE,帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等功能。
7.使用shiro框架
7.1 使用shiro框架完成认证工作
7.1.1 shiro中认证的关键对象
Subject:主体
需要进行认证的事物,都可以理解为一个主体,例如:访问某系统的用户。主体可以是用户、程序,也可以是另一个系统
Principal:身份信息(理解为账号)
是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。
credential:凭证信息(理解为密码)
是只有主体自己知道的安全信息,如密码、证书等。
7.1.2 认证流程
7.1.3 实现代码
暂时使用ini文件来代替数据库存储账号和密码。
1.创建一个maven java工程,并引入shiro依赖(由于只是简单的java-maven项目,因此只需要引入简单的依赖即可)
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.9.0</version> </dependency> 2.编写代码public static void main(String[] args) { //1.获取SecurityManager对象 DefaultSecurityManager securityManager = new DefaultSecurityManager(); //2.读取ini文件 //IniRealm iniRealm = new IniRealm("classpath:shiro.ini"); //3.设置securityManager的realm MyRealm myRealm = new MyRealm(); securityManager.setRealm(myRealm); //4.设置securityManager上下文生效 SecurityUtils.setSecurityManager(securityManager); //5.获取subject主体对象 Subject subject = SecurityUtils.getSubject(); try { //使用token封装用户输入的身份信息和凭证信息 UsernamePasswordToken token = new UsernamePasswordToken("admin","123456"); subject.login(token); System.out.println("登陆成功!"); } catch (Exception e) { e.printStackTrace(); System.out.println("账号或密码错误!"); } }
7.1.4 认证的原理
7.1.5 通过数据库完成认证
如果我们希望用数据库中的账户和密码来完成认证功能,那么只需要定义一个类并继承AuthenticatingRealm.
7.2 使用shiro框架完成授权功能
7.2.1 授权流程