(二)Apache Shiro 身份验证之Realm

搭建一个简单的shiro项目:本人写博客初衷是记录学习记录以及方便日后查看,如果帮助到你们最好不过

第一篇文章我们是将用户密码验证写在配置文件中,但是这不符合我们的真实开发,真实开发用户密码是存放于数据库动态验证的。所以一下我们来看看shiro如何操作


1.Shiro三大核心 Subject, SecurityManager 和 Realms


1)Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

2)SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互;相当于Spring MVC前段控制器DispatcherServlet。

3)Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限), 就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用 户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。


2.Subject认证主体

Principals:身份,可以使用户名、邮件、手机号等等,用来标识一个登录主体身份

Credntials:凭证,常见的有密码,数字证书等


3.重点来了---什么是Realm?

       个人理解其实Realm就是从realm中获取相应的身份信息来进行验证,简单来说,我们可以自行定义realm,在realm中,从数据库获取身份信息,然后和 用户输入的身份信息进行匹配。


4.我来用jdbcRealm举个栗子

首先新建一个maven项目



利用maven导入java包


书写jdbcRealm配置文件



数据库配置

注意:数据库的表名和字段名称一定要是截图一样


准备工作完成 下面直接开始写程序测试

package com.study.chapter01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloShiro {

	private static final Logger logger = LoggerFactory.getLogger(HelloShiro.class);  
	
	public static void main(String[] args) {  
		
        // 利用工厂管理方法,加载配置文件  
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbc_realm.ini");  
        // 获取实例对象  
        SecurityManager securityManager = factory.getInstance();  
        // 将其存储进工具类方便校验(securityManager绑定到SecurityUtils)  
        SecurityUtils.setSecurityManager(securityManager);  
        // 获取当前的用户信息  
        Subject currentUser = SecurityUtils.getSubject();  
        // 获取令牌(设置固定的username password 以便测试)  
        UsernamePasswordToken token = new UsernamePasswordToken("ShiroA", "111111");  
        
        try {  
            // 身份验证  
            currentUser.login(token);  
            logger.info("HelloShiro 验证成功!!!!");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        // 注销  
        currentUser.logout();  
    }  
	
}


测试结果:




完结 撒花

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值