1、使用shiro框架来完成认证工作,默认情况下使用的是IniRealm。如果需要使用其他Realm,那么需要进行相关的配置。

2、ini配置文件讲解:

  [main] section是你配置应用程序的SecurityManager实例及任何它的依赖组件(如Realms)的地方。

[main]
myRealm=cn.sun.realm.MyRealm
#依赖注入
securityManager.realm=$myRealm

  [users] section允许你定义一组静态的用户账户。在这大部分拥有少数用户账户或用户账户不需要运行时被动态地创建的环境下是很有用的。

[users]
zhangsan=1111
lisi=2222,role1,role2

  [roles] section允许你把定义在[users] section中的角色与权限关联起来。另外,这在大部分拥有少数用户账户或用户账户不需要再运行时被动态地创建的环境下是很有用的。

[users]
zhangsan=1111,role1
[roles]
role1=user:add,user:delete

3、使用JdbcRealm来完成身份认证

  通过观察JdbcRealm可知,要实现JdbcRealm:

  (1)需要为jdbcRealm设置dataSource

  (2)在指定的dataSource所对应的数据库中应有用户表users,该表中应该有username,password,password_salt等

4、实现步骤

  (1)新建数据库表

    

  (2)配置shiro.ini文件

 [main]
#配置数据源
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.url=jdbc:mysql://127.0.0.1:3306/shiro?serverTimezone=GMT%2B8
dataSource.driverClassName=com.mysql.cj.jdbc.Driver
dataSource.username=root
dataSource.password=root
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
# $表示引用对象
jdbcRealm.dataSource=$dataSource
securityManager.realm=$jdbcRealm

  说明:特别要注意连接池配置关键字:url,driverClassName,username,password  

  (3)测试

JdbcDemo.java

 package com.sun123.shiro;

 import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.util.Factory;
//java.lang中有SecurityManager的包,需要改成Apache的
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject; public class JdbcDemo { public static void main(String[] args) {
// 1、创建SecurityManager工厂,读取相应的配置文件
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 2、通过SecurityManager工厂获取SecurityManager的实例
SecurityManager securityManager = factory.getInstance();
// 3、将securityManager对象设置到运行环境中
SecurityUtils.setSecurityManager(securityManager);
// 4、通过SecurityUtils获取主体Subject
Subject subject = SecurityUtils.getSubject();
// 5、加入登录的用户名zhangsan和1111,这个地方的zhangsan和1111表示用户登录时输入的信息
// 而shiro.ini文件中的信息相当于数据库中存放的信息
// UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111");
UsernamePasswordToken token = new UsernamePasswordToken("wangwu", "111");
try {
// 6、进行用户身份验证
subject.login(token);
// 7、通过subject来判断用户是否通过验证
if (subject.isAuthenticated()) {
System.out.println("验证通过");
}
} catch (UnknownAccountException e) {// AuthenticationException为父异常 Ctrl+T看子异常
System.out.println("用户名/密码不正确");
} catch (IncorrectCredentialsException e) {// AuthenticationException为父异常 Ctrl+T看子异常
System.out.println("用户名或密码不正确");
} }
}

log4j.properties

 log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n

代码运行结果:

5、Authentication Strategy:认证策略,在shiro中有3种认证策略

  (1)AtleastOneSuccessfulStrategy:如果一个(或更多)Realm 验证成功, 则整体的尝试被认为是成功的。 如果没有一个验证成功,则整体尝试失败。

  (2)FirstSuccessfulStrategy:只要有第一个成功地验证的 Realm返回的信息将被使用 。所有进一步的Realm将被忽略。如果没有一个验证成功, 则整体尝试失败。

  (3)AIISucessfulStrategy:为了整体的尝试成功,所有配置的Realm必须验证成功。如果没有一个验证成功,则整体尝试失 败。

  默认的策略是:AtleastOneSuccessfulStrategy

6、设置认证策略

 #验证策略设置
authenticationStrategy=org.apache.shiro.authc.pam.AllSuccessfulStrategy
securityManager.authenticator.authenticationStrategy=$authenticationStrategy

第三讲JdbcRealm及Authentication Strategy的更多相关文章

  1. Central Authentication Service

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. SpringMVC整合Shiro——(3)

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

  3. (转)Shiro学习

    (二期)13.权限框架shiro讲解 [课程13]自定义Realm.xmind36.8KB [课程13]用户授权流程.xmind0.2MB [课程13]shiro简介.xmind0.3MB [课程13 ...

  4. Shiro的学习

    Apache Shiro 是 Java 的一个安全(权限)框架.它可以非常容易的开发出足够安全的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境 . Shiro 可以完成:认证 ...

  5. Shiro权限框架简介

    http://blog.csdn.net/xiaoxian8023/article/details/17892041   Shiro权限框架简介 2014-01-05 23:51 3111人阅读 评论 ...

  6. 学习shiro第三天

    今天比较晚,所以只看了shiro的认证策略Authentication Strategy,下面讲讲shiro的三种认证策略. 1.AtLeastOneSuccessfulStrategy:这个是shi ...

  7. Apache Shiro安全(权限框架)学习笔记一

    1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法 2. AuthorizingRealm 类继承自 Authenticating ...

  8. shiro-简介

    简介: Apache Shiro 是Java的一个安全(权限)框架. Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境. Shiro可以完成:认证 ...

  9. 第一章 Shiro简介——《跟我学Shiro》(转)

    目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...

随机推荐

  1. HDU 5687 Problem C ( 字典树前缀增删查 )

    题意 : 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作: 1.insert : 往神奇字典中插入一个单词 2.delete: 在神奇字典中删除所有前缀等于给定字符串的单词 3.search: ...

  2. 【CF1236D】Alice and the Doll(set)

    题意:给定一个n*m的网格,其中k格有障碍 周驿东从(1,1)出发面朝右,每次行动前他可以选择顺时针旋转90度或不旋转,然后向自己朝向的位置走1格 问他能否不重复不遗漏的走过所有非障碍格 n,m,k& ...

  3. vue中移动端自适应方案

    安装 lib-flexible 1.npm i lib-flexible 2.在项目入口文件 main.js 里 引入 lib-flexible import ‘lib-flexible’ 3.添加m ...

  4. Linux下修改mysql root密码

    1.修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables 2.保存配置文件后,重启MySQL服务 service mysqld re ...

  5. MacOS下Java Mission Control无法正常启动

    参考JMC(Java Mission Control)在mac下无法启动和显示界面 附件下载地址备份(org.eclipse.swt.cocoa.macosx.x86_64-3.112.0.jar) ...

  6. WinForm实现最小化右下角

    首先,要在窗体里面加入这么两个控件,左边的是托盘控件,右边的是菜单控件. 然后设置窗体的FormClosing事件: if (e.CloseReason == CloseReason.UserClos ...

  7. 十、补充数据类型set

    set:无顺序的不重复的集合 list---允许重复,修改tuple--允许重复,不能修改 set----不允许重复的集合例子: s=set()print s l1=[11,22,33,22,11]l ...

  8. 010-elasticsearch5.4.3【四】-聚合操作【一】-度量聚合【metrics】-min、max、sum、avg、count

    一.概述 度量类型聚合主要针对的number类型的数据,需要ES做比较多的计算工作 参考向导:地址 import org.elasticsearch.search.aggregations.Aggre ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中练习-自定义函数模型拼接

  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_8_File类遍历(文件夹)目录功能

    遍历这个目录下的文件 遍历一个文件就会报错’ 不存在的路径,也会报空指针异常 遍历可以获取到隐藏的文件夹和文件.常见一个隐藏的文件和文件夹 ListFiles私有类型的数组