当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>Acegi(十三):让系统记着我</b>[Java编程]

赞助商链接



  本文“<b>Acegi(十三):让系统记着我</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

经过一段时间的总结, 对Acegi的初步研究终于到了最后一个常见Filter了,即 rememberMeProcessingFilter . 顾名思义, rememberMeProcessingFilter就是想让系统记下来当前登录的用户,不至于今后每次进系统时都要输入用户名密码.这方面的例子相信大家已有领会,我也就没必要在些赘述.

先扼要地说下原理. 假定用户登录时挑选了"让系统记着我"后, request进入Acegi后, Acegi会把用户名密码和相关信息记下来,再以Cookie的情势通过Response发往浏览器并存储到浏览器中,这样下次用户拜候系统时,系统会通过 rememberMeProcessingFilter从浏览器传来的Cookie中取出先前的登录信息,做判断后以一个 remember-me authentication的情势放到SecurityContext中,接下来,跟anonymousProcessingFilter近似,在 filterInvocationInterceptor查抄时,也由自己人投一票通过,于是就通过Acegi的查问去做想做的操作. 这里我们也看来,其实是不系统记下来了,而浏览器以cookie的情势住了, Acegi只是环绕着cookie在符合的时刻做些符合的事.

有了这个对原理的简单介绍,下面我们来看怎么配置,以及这个原理又是由谁来具体实现的.

按上面原理的次序,以便用户挑选能否让"系统记着我", 往login.jsp里加一个以下所示的一个input标签.

<input type="checkbox" name = "rememberMe " />让系统记着我

注意下这里的 rememberMe,背面要用到的.

再往从前定义好的 authenticationProcessingFilter里了加个属性,rememberMeServices,以下所示:

<!--新加 start ,这个很重要,没有它系统就"记不住你"了-->
<property name="rememberMeServices" ref="rememberMeServices"/>
<!--新加 end -->

通过个rememberMeServices, Acegi在得知用户登录成功后会把用户名和密码生成一个Cookie放入到response里,(这个cookie里有Acegi做的暗号,这样 acegi今后才能识得), 让它捎给浏览器保存下来,以备后用. 这步对应着上面用户第一次输入用户名密码成功登录的情形.

接下就是用户不用登录拜候系统了. 这要配置主角 rememberMeProcessingFilter了, 其实现类为RememberMeProcessingFilter,这个类两个属性authenticationManager和rememberMeServices需求配置.以下:

<!--新加 start-->
<bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="rememberMeServices" ref="rememberMeServices"/>
</bean>
<!--新加 end -->

加了这个filter后, request经过这里时,acegi通过rememberMeServices(对,又是它,上面在登录成功时就用到了),把呼应的cookie取出来,再生成一个remember-me_authentication放到securityContext中, authenticationManager在此的目的是为了查验rememberMeServices从cookies里取出的remember- me_authentication能否有效.

先看rememberMeServices定义,其定义以下:

<!--新加 start-->
<bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
<property name="userDetailsService" ref="userDetailsService"/>
<property name="key" value="23_*!cdU='612./e;NrI"/>
<property name="parameter" value="rememberMe"/>
</bean>
<!--下面, 这个rememberMeAuthenticationProvider加到了已经定义好的authenticationManager bean的providers里-->
<bean id="rememberMeAuthenticationProvider" class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<property name="key" value="23_*!cdU='612./e;NrI"/>
</bean>
<!--新加 end -->

三个属性,它们辨别是用来干啥的? 实际上, 在上面rememberMeProcessingFilter里,rememberMeServices通过userDetailsService对 cookie里取出的userName举行了查验,一是看目前还有没这个user, 二是看密码能否已改.这也恰是下面rememberMeServices里为什么要有userDetailsService的缘由.那key是干啥的呢? 在上面authenticationManager考证remember-me_authentication能否有效时与provider里的key来做对比的,恰是由于这个缘由,下面两处的key值得一模一样. 那个parameter呢? 再回过头看第一步, 那边我们加了一个name为rememberMe的input标签,Acegi内部也恰是通过个标签来决意能否要做进一步的装cookie处理.

至此,结合背后的实现原理, rememberMeProcessingFilter的配置完成完毕,在filterInvocationInterceptor查抄当前角色能否有充足的操作时,就会在 remember-me_authentication自己人rememberMeAuthenticationProvider的"保护"下顺利通过了.

这里为了阐明配置都起什么作用,这些配置很散,大家可从附件中看到这些配置都加到什么位置了,它们又是怎么跟原的filter及其支持类配合的.


  以上是“<b>Acegi(十三):让系统记着我</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .