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. nginx 缓存设置

    浏览器缓存原理 浏览器缓存 HTTP协议定义的缓存机制(如:Expires:Cache-control等) 2.浏览器无缓存 3.客户端有缓存 校验过期机制 校验是否过期                ...

  2. Nginx与Lua开发

    1.Lua及基础语法 Nginx与Lua环境 场景:用Nginx结合Lua实现代码的灰度发布 1.Lua 是一个简洁.轻量.可扩展的脚本语言 2.Nginx+Lua优势 充分的结合Nginx的并发处理 ...

  3. OpenCV feature2d

    /*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...

  4. E. You Are Given Some Strings...

    E. You Are Given Some Strings... AC自动机 求一个串$t$中包含子串$s_{i}+s_{j}$的个数. 可以正反跑两遍AC自动机 正着跑,表示$s_{i}$结束,反正 ...

  5. java.lang.OutOfMemoryError:GC overhead limit exceeded解决方

    Tomcat异常信息: Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit excee ...

  6. shell后台进程

    建立duplicate_removal.sh文件,内容如下:#!/bin/bashmysql -vvv -u root -p123456 test -e "truncate t_target ...

  7. Netty 系列之 Netty 高性能之道 高性能的三个主题 Netty使得开发者能够轻松地接受大量打开的套接字 Java 序列化

    Netty系列之Netty高性能之道 https://www.infoq.cn/article/netty-high-performance 李林锋 2014 年 5 月 29 日 话题:性能调优语言 ...

  8. linux管理权限

    1.linux命令查询 root id 2.切换用户 su - xiaobai 一定要加"  -  "这个会将你的所有环境变量都带过来 3.root用户切换普通用户不需要输入密码反 ...

  9. WPF UI Close button

    <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/w ...

  10. DRF中的视图集的使用

    1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把  GenericAPIView ...