shiro之 JdbcRealm及Authentication Strategy

Posted forever_2h

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shiro之 JdbcRealm及Authentication Strategy相关的知识,希望对你有一定的参考价值。

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

 

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

[main]
myRealm=cn.sxt.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可知,要实现JdbcReaml:

a) 需要为jdbcRealm设置dataSource

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

实现步骤:

a)新建数据库表:

b) 配置 shiro.ini 文件:

[main]
#配置数据源
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro
dataSource.user=root
dataSource.password=1111
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
#$表示引用对象
jdbcRealm.dataSource=$dataSource
securityManager.realm=$jdbcRealm

c) 猜测

public static void main(String[] args) {
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager=factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("wangwu", "1111");
        try {
            subject.login(token);
            if(subject.isAuthenticated()){
                System.out.println("验证通过");
            }
        } catch (AuthenticationException e) {
            System.out.println("验证失败");
        }
    }

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

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

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

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

  默认的策略是:AtLeastOneSuccessfulStrategy

6. 设置认证策略:

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

 

以上是关于shiro之 JdbcRealm及Authentication Strategy的主要内容,如果未能解决你的问题,请参考以下文章

shiro框架学习-4- Shiro内置JdbcRealm

使用 JDBCRealm 通过 Shiro 对用户进行身份验证

shiro,使用第三方jdbcRealm连接数据库操作

如何在 Shiro 中使用 JdbcRealm 对提交的密码进行哈希处理?

Shiro JdbcRealm 授权的表模式?

Shiro Spring JDBCRealm 身份验证和授权