仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1024|回复: 19
打印 上一主题 下一主题

[学习教程] 来看Acegi(十三):让体系记着我

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:34 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
经由一段工夫的总结,对Acegi的开端研讨终究到了最初一个罕见Filter了,即rememberMeProcessingFilter.望文生义,rememberMeProcessingFilter就是想让体系记上去以后登录的用户,不至于今后每次进体系时都要输出用户名暗码.这方面的例子信任人人已有体味,我也就不用在些赘述.
先扼要地说下道理.假定用户登录时选择了"让体系记着我"后,request进进Acegi后,Acegi会把用户名暗码和相干信息记上去,再以Cookie的情势经由过程Response发往扫瞄器并存储到扫瞄器中,如许下次用户会见体系时,体系会经由过程rememberMeProcessingFilter从扫瞄器传来的Cookie中掏出先前的登录信息,做判别后以一个remember-meauthentication的情势放到SecurityContext中,接上去,跟anonymousProcessingFilter相似,在filterInvocationInterceptor反省时,也由本人人投一票经由过程,因而就经由过程Acegi的查询往做想做的操纵.这里我们也看来,实际上是不体系记上去了,而扫瞄器以cookie的情势住了,Acegi只是环绕着cookie在符合的时分做些符合的事.

有了这个对道理的复杂先容,上面我们来看怎样设置,和这个道理又是由谁来详细完成的.
按下面道理的按次,以便用户选择是不是让"体系记着我",往login.jsp里加一个以下所示的一个input标签.
<inputtype="checkbox"name="rememberMe"/>让体系记着我
注重下这里的rememberMe,前面要用到的.
再往之前界说好的authenticationProcessingFilter里了加个属性,rememberMeServices,以下所示:
<!--新加start,这个很主要,没有它体系就"记不住你"了-->
<propertyname="rememberMeServices"ref="rememberMeServices"/>
<!--新加end-->
经由过程个rememberMeServices,Acegi在得知用户登录乐成后会把用户名和暗码天生一个Cookie放进到response里,(这个cookie里有Acegi做的灯号,如许acegi今后才干识得),让它捎给扫瞄器保留上去,以备后用.这步对应着下面用户第一次输出用户名暗码乐成登录的情形.
接下就是用户不必登录会见体系了.这要设置配角rememberMeProcessingFilter了,实在现类为RememberMeProcessingFilter,这个类两个属性authenticationManager和rememberMeServices必要设置.以下:
<!--新加start-->
<beanid="rememberMeProcessingFilter"class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
<propertyname="authenticationManager"ref="authenticationManager"/>
<propertyname="rememberMeServices"ref="rememberMeServices"/>
</bean>
<!--新加end-->
加了这个filter后,request经由这里时,acegi经由过程rememberMeServices(对,又是它,下面在登录乐成时就用到了),把响应的cookie掏出来,再天生一个remember-me_authentication放到securityContext中,authenticationManager在此的目标是为了查验rememberMeServices从cookies里掏出的remember-me_authentication是不是无效.
先看rememberMeServices界说,其界说以下:
<!--新加start-->
<beanid="rememberMeServices"class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="key"value="23_*!cdU=612./e;NrI"/>
<propertyname="parameter"value="rememberMe"/>
</bean>
<!--上面,这个rememberMeAuthenticationProvider加到了已界说好的authenticationManagerbean的providers里-->
<beanid="rememberMeAuthenticationProvider"class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<propertyname="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及其支持类共同的.

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
谁可相欹 该用户已被删除
沙发
 楼主| 发表于 2015-3-8 17:24:56 | 显示全部楼层
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-13 20:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表