码迷,mamicode.com
首页 > 其他好文 > 详细

测试内容

时间:2019-04-28 22:01:22      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:shiro   https   数据   关注   数据信息   应该   简介   lse   api   

一、Shiro简介

1.Shiro主要功能

  • Authentication:身份认证/登陆,验证用户是不是拥有相应的身份
  • Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限
  • Sessioin Manager:会话管理,即用户登陆后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
  • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

2.Shiro工作中流程

  • Subject:应用代码直接交互对象的Subject,所有Subject都绑定到SecurityManager,可以把Suubject认为是一个门面;SecurityManager才是实际的执行者
  • SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,他负责与后边介绍的其他组件进行交互,就比如是SpringMVC的DispatcherServlet前端控制器一样
  • Realm:域,Shiro从Realm获取安全数据(用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法,也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

二、Shiro基础开发

1.搭建开发环境

<!--首先配置servlet开发包-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
<!--配置Shiro相关开发包-->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.3.0</version>
</dependency>
<!--配置日志相关开发包,在导入log4j.properties-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>mchange-commons-java</artifactId>
    <version>0.2.12</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>

2.固定信息验证

  1. 用户认证
    认证主体信息:principals(身份),例如:用户名
    认证信息:credentials(密码),文字密码、证书
    在资源目录下创建一个shiro.ini文件
[users]
admin=hello
mldn=java

定义了2个用户

  1. 进行shiro的认证编写
  • 如果想要进行shiro的认证信息的读取,需要使用一个org.apache.shiro.util.Factory接口,在这个接口里面定义有取得一个SecurityManager接口对象的方法:public T getInstance():
    • 此方法可以取得一个org.apache.shiro.mgt.SecurityManager接口对象
    • Factory是接口,本次将通过ini文件进行读取,所以应该使用"org.apache.shiro.config.IniSecurityManagerFactory"子类,这个子类主需要关注他的构造方法:public IniSecurityManagerFactory(String iniResourcePath),资源定位通过classpath取得
  • Factory接口中报关的是SecurityManager接口对象,这个接口对象主要是进行所有认证信息处理的,也就是说用户读取进来的资源文件在这个接口里面转换为认证数据(用户名、密码)
  • 具体的认证信息一定要通过Subject接口来实现,而SecurityManager只是一个综合认证的集合,所以为了解决这个问题可以使用"org.apache.shiro.SsecurityUtils"这个类有2个方法:
    • 设置SecurityManager接口对象:public static void setSecurityManager(SecurityManager securityManager)
    • 取得一个要进行认证的subject接口:public static Subject getSubject()
  • 需要将用户名和密码包装为一个Token,因为在Subject接口下有如下方法
    • 登陆验证:public void login(AuthenticationToken token) throws AuthenticationException
    • 登陆注销:public void logout()
      ```java
      package cn.mldn.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class TestLoginDemo {
public static void main(String[] args) {
// 取得Factory接口对象,主要的目的是通过配置文件加载文件之中的信息,这些信息暂时不能够成为认证信息
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 取得里面所保存的所有的认证数据信息
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
// 利用一个专门的认证操作的处理类,实现认证处理的具体的实现
SecurityUtils.setSecurityManager(securityManager);
// 获取进行用户名和密码认证的接口对象
Subject subject = SecurityUtils.getSubject() ;
// 定义了一个Token,里面保存要登录的用户名和密码信息
UsernamePasswordToken token = new UsernamePasswordToken("admin","hello") ;
// 实现用户登录处理
subject.login(token);
System.out.println(subject.getPrincipal()); // 取得用户名
}
}

- 异常
1. 用户名正确,密码错误

Exception in thread "main" org.apache.shiro.authc.IncorrectCredentialsException:
Submitted credentials for token
[org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false] did not match the expected credentials.

2. 用户名错误,密码正确

Exception in thread "main" org.apache.shiro.authc.UnknownAccountException:
Realm [org.apache.shiro.realm.text.IniRealm@4696954c] was unable to find account data for the submitted AuthenticationToken
[org.apache.shiro.authc.UsernamePasswordToken - admina, rememberMe=false].
```

3.认证流程

技术图片

link

测试内容

标签:shiro   https   数据   关注   数据信息   应该   简介   lse   api   

原文地址:https://www.cnblogs.com/liusuixing/p/10787106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!