谁可相欹 发表于 2015-1-18 11:32:34

来看Acegi(十三):让体系记着我

其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
经由一段工夫的总结,对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-1-21 09:50:40

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

海妖 发表于 2015-1-30 14:09:19

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

飘飘悠悠 发表于 2015-2-2 17:45:33

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

飘灵儿 发表于 2015-2-4 03:03:15

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

小女巫 发表于 2015-2-7 20:14:15

是一种使网页(Web Page)产生生动活泼画面的语言

爱飞 发表于 2015-2-18 06:45:34

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

金色的骷髅 发表于 2015-3-6 00:37:52

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

谁可相欹 发表于 2015-3-8 17:24:56

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

蒙在股里 发表于 2015-3-11 22:01:28

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

透明 发表于 2015-3-17 19:23:29

Java是一种计算机编程语言,拥有跨平台、面向对java

愤怒的大鸟 发表于 2015-3-30 11:44:33

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

柔情似水 发表于 2015-3-31 23:32:28

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

兰色精灵 发表于 2015-4-1 22:11:29

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小妖女 发表于 2015-4-7 22:12:26

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

再现理想 发表于 2015-4-11 12:53:27

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

若天明 发表于 2015-5-4 12:18:31

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

因胸联盟 发表于 2015-5-6 00:11:47

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

小魔女 发表于 2015-6-14 20:29:41

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

精灵巫婆 发表于 2015-6-18 11:18:24

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
页: [1]
查看完整版本: 来看Acegi(十三):让体系记着我