Apache Shiro Authentication学习笔记

Authentication(验证)机制:

1.获取提交识别属性(用户名……)与验证属性(密码……)。

2.实现验证过程。

3.验证成功通过,不成功返回。

一、获取信息案例:

//Example using most common scenario of username/password pair:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);

//”Remember Me” built-in:
token.setRememberMe(true);

    案例用到常见的用户名/密码验证机制,UsernamePasswordToken是 org.apache.shiro.authc.AuthenticationToken接口的实现类。AuthenticationToken接口是实现验证的基础接口,且与信息获取过程无关。

    本例的setRememberMe(true)方法表示,Shiro启动记忆模块。

二、验证过程案例:

Subject currentUser = SecurityUtils.getSubject();

currentUser.login(token);

    案例调用login方法对用户信息进行有效性验证。

三、返回结果案例:

try {
    currentUser.login(token);
} catch ( UnknownAccountException uae ) { ...
} catch ( IncorrectCredentialsException ice ) { ...
} catch ( LockedAccountException lae ) { ...
} catch ( ExcessiveAttemptsException eae ) { ...
} ... catch your own ...
} catch ( AuthenticationException ae ) {
    //unexpected error?
}

//No problems, continue on as expected...

    验证成功,可以进行下一步操作;验证失败,Shiro提供了不同层级的验证失败返回结果集。


Remembered和Authenticated

    Remembered:已记住,系统记忆用户信息,查看敏感信息时仍需验证。

    Authenticated:已验证,系统已验证,拥有用户所有权限。


Layout案例

currentUser.logout(); //removes all identifying information and invalidates their session too.

   案例中调用Shiro的logout方法来退出,Shiro将删除用户保存信息,包括相关Session,但不包含cookie。cookie是保存在本地的内容,所以Shiro的建议是在退出重定向时完成cookie的清理。


Authentication的内部实现过程




1.应用调用subject的login方法请求验证;

2.subject初始化,授权securityManager,调用securityManager的login方法验证,验证正式开始;

3.securityManager接收到subject的信息和授权,调用内部Authenticator的authenticator(token)方法。多数情况下,这里就是ModularRealmAuthenticator的验证,可以拥有多个,也可以是一个。

4.如果ModularRealmAuthenticator有多个,则会自动开启一个AuthenticationStrategy。

5.每个配置的Relam都会去匹配条件,如果符合,则调用Relam的getAuthenticationInfo方法。


Authenticator

    单一Relam案例:

[main]
...
authenticator = com.foo.bar.CustomAuthenticator

securityManager.authenticator = $authenticator

    可以自定义Relam。


AuthenticationStrategy

    是一个Shiro内置的Relam管理容器,当拥有多个Relam时,需要由它来管理。主要的作用就是将验证状态进行整合处理。

    AuthenticationStrategy是一个无状态的组件,验证时产生四次尝试:

    1.在所有Relam执行之前;

    2.在每个Relam的 getAuthenticationInfo方法执行之前;

    3.在每个Relam的 getAuthenticationInfo方法执行之后;

    4.在所有Relam执行之后。

AuthenticationStrategy有三种实现处理类:

    1.AtLeastOneSuccessfulStrategy 至少一个成功,即是成功。全部失败,则失败。

    2.FirstSuccessfulStrategy 第一个成功,则成功,其余忽略。

    3.AllSuccessfulStrategy 全部成功则成功,否则失败。

    默认情况下,是按第一种情况处理。定制案例(shiro.ini):

[main]
...
authcStrategy = org.apache.shiro.authc.pam.FirstSuccessfulStrategy

securityManager.authenticator.authenticationStrategy = $authcStrategy

...

    如需实现自定义的AuthenticationStrategy,则需要实现org.apache.shiro.authc.pam.AbstractAuthenticationStrategy,这个类会自动捆绑聚合Relam返回的结果集。


Relam的处理顺序与其引用的顺序一致,案例:

blahRealm = com.company.blah.Realm
...
fooRealm = com.company.foo.Realm
...
barRealm = com.company.another.Realm

securityManager.realms = $fooRealm, $barRealm, $blahRealm
...

    案例中blahRelam将在最后进行匹配执行。在此处进行relam引用,相当于在代码中,对realms赋值,所以不需要在代码中进行另外的处理。与别的配置方式不同的是,此处如果定义多个Relam,但是只引用一个的话,验证时只会处理一个Relam。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值