﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-LiuTing-随笔分类-身份认证管理 </title><link>http://www.blogjava.net/LiuTing/category/22614.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 May 2007 01:04:25 GMT</lastBuildDate><pubDate>Mon, 21 May 2007 01:04:25 GMT</pubDate><ttl>60</ttl><item><title>Acegi工作流程</title><link>http://www.blogjava.net/LiuTing/archive/2007/05/20/118674.html</link><dc:creator>LiuTing</dc:creator><author>LiuTing</author><pubDate>Sun, 20 May 2007 04:44:00 GMT</pubDate><guid>http://www.blogjava.net/LiuTing/archive/2007/05/20/118674.html</guid><wfw:comment>http://www.blogjava.net/LiuTing/comments/118674.html</wfw:comment><comments>http://www.blogjava.net/LiuTing/archive/2007/05/20/118674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LiuTing/comments/commentRss/118674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LiuTing/services/trackbacks/118674.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt">任何一个安全系统都包括authentication和authorization两部分，Acegi相同。</span> </p>
<p><span style="FONT-SIZE: 10pt"><strong>第一部分：authentication</strong> </span></p>
<p><span style="FONT-SIZE: 10pt">1、acegi通过AuthenticationProcessingFilter拦截login请求获取Principal和Credential信息（通俗一点就是用户名和密码）；</span> </p>
<p><span style="FONT-SIZE: 10pt">2、验证用户名密码，由这个Filter调用认证管理器AuthenticatiomManager进行验证。</span> </p>
<p><span style="FONT-SIZE: 10pt">AuthenticatiomManager本身并不具备验证的功能，它相当与是一个验证控制器，由它来管理验证的过程及方式。AuthenticatiomManager是通过调用provider来进行验证的，一个manager中可以具有多个provider，但只要有一个provider验证通过，manager就认为验证成功。</span> </p>
<p><span style="FONT-SIZE: 10pt">这部分要明白三点：一，provider是可以配置进去的，因为acegi是基于spring的；二是AuthenticatiomManager是可以被重写的，你可以将manager改成你自己希望的控制器；三，好好利用event，这是标准的observer模式。acegi中的设计模式研究将在以后的贴子中讨论。</span> </p>
<p><span style="FONT-SIZE: 10pt">3、provider进行验证。</span> </p>
<p><span style="FONT-SIZE: 10pt">provider是真正的验证模块，并且决定了验证的模式。provider目前acegi提供了dao、jaas，cas，x509，ldap等几种验证方式，这些验证方式的具体内容可以查阅acegi的文档。provider验证通过后将Authentication对象返回。</span> </p>
<p><span style="FONT-SIZE: 10pt">4、AuthenticationProcessingFilter将对象保存到ContextHolder中。Authentication部分结束。</span> </p>
<p><span style="FONT-SIZE: 10pt"><strong>第二部分：authorization</strong> </span></p>
<p><span style="FONT-SIZE: 10pt">1、用户提交请求，拦截器FilterSecurityInterceptor拦截请求，拦截器是一个Filter.</span> </p>
<p><span style="FONT-SIZE: 10pt">2&nbsp;、鉴权，拦截器调用AccessDecisionManager进行鉴权。</span> </p>
<p><span style="FONT-SIZE: 10pt">AccessDecisionManager是通过投票的方式来决定是否有权限访问资源。所谓投票就要包括投票的参与者和投票的策略。</span> </p>
<p><span style="FONT-SIZE: 10pt">投票的参与者decisionVoters，这是AccessDecisionManager的一个属性。decisionVoter能从某一个角度决定用户是否能访问资源，例如RoleVoter来判断用户的角色是否有权限访问资源，MaxuserVoter来决定某个资源的访问用户数是否已经达到了最大值等。</span> </p>
<p><span style="FONT-SIZE: 10pt">投票策略。投票的策略是通过不同的AccessDecisionManager来实现的，例如acegi提供的AffirmativeBased对象，这个对象的策略就是只要有一个投票通过就全体通过。UnanimousBased对象的策略是必须全体投票通过才能通过。但在大多数情况下acegi提供的AccessDecisionManager不能满足我们的要求，这就需要我们去实现AccessDecisionManager接口，去定制适合自己项目的策略。</span> </p>
<div><span style="FONT-SIZE: 10pt">3、投票。投票对象必须实现AccessDecisionVoter接口。投票对象关注的是某一方面的决定权，如果投票通过则Vote方法来完成的。vote方法必须返回一个int型的数据代表投票结果，它们是AccessDecisionVoter的三个静态成员属性：ACCESS_ABSTAIN,，ACCESS_DENIED和ACCESS_GRANTED，它们分别是弃权，否决和赞成。</span> </div>
<div><span style="FONT-SIZE: 10pt"></span>&nbsp;</div>
<div><span style="FONT-SIZE: 10pt">
<h4><span style="FONT-SIZE: 10pt">安全拦截器</span> </h4>
<h5>&nbsp; 拦截器如何工作<br>&nbsp; MethodInvocation拦截器<br>&nbsp; FilterInvocation拦截器</h5>
<h4><span style="FONT-SIZE: 10pt">认证</span> </h4>
<h5>&nbsp; 认证请求<br>&nbsp; 认证管理器<br>&nbsp; Authentication Provider</h5>
<h4><span style="FONT-SIZE: 10pt">授权</span> </h4>
<h5>&nbsp; Access Decision Manager<br>&nbsp; Voting Decision Manager<br>&nbsp; 授权管理推荐</h5>
<h4><span style="FONT-SIZE: 10pt">ContextHolder的用户接口</span> </h4>
<h5>&nbsp; 用户接口目标<br>&nbsp; HTTP会话认证<br>&nbsp; HTTP Basic认证</h5>
</span></div>
<img src ="http://www.blogjava.net/LiuTing/aggbug/118674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LiuTing/" target="_blank">LiuTing</a> 2007-05-20 12:44 <a href="http://www.blogjava.net/LiuTing/archive/2007/05/20/118674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Acegi时获取用户信息的几个函数</title><link>http://www.blogjava.net/LiuTing/archive/2007/05/20/118673.html</link><dc:creator>LiuTing</dc:creator><author>LiuTing</author><pubDate>Sun, 20 May 2007 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/LiuTing/archive/2007/05/20/118673.html</guid><wfw:comment>http://www.blogjava.net/LiuTing/comments/118673.html</wfw:comment><comments>http://www.blogjava.net/LiuTing/archive/2007/05/20/118673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LiuTing/comments/commentRss/118673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LiuTing/services/trackbacks/118673.html</trackback:ping><description><![CDATA[<font color=#008080>1</font> <img id=Codehighlighter1_0_34_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_34_Open_Text.style.display='none'; Codehighlighter1_0_34_Closed_Image.style.display='inline'; Codehighlighter1_0_34_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_0_34_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_34_Closed_Text.style.display='none'; Codehighlighter1_0_34_Open_Image.style.display='inline'; Codehighlighter1_0_34_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span id=Codehighlighter1_0_34_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span> <span id=Codehighlighter1_0_34_Open_Text><span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;取得当前用户名<br></span><span style="COLOR: #008080">&nbsp;3</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="COLOR: #808080">@return</span> <span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;4</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">*/</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span> <span style="COLOR: #000000"><img id=Codehighlighter1_72_583_Open_Image onclick="this.style.display='none'; Codehighlighter1_72_583_Open_Text.style.display='none'; Codehighlighter1_72_583_Closed_Image.style.display='inline'; Codehighlighter1_72_583_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_72_583_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_583_Closed_Text.style.display='none'; Codehighlighter1_72_583_Open_Image.style.display='inline'; Codehighlighter1_72_583_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">&nbsp;String&nbsp;getUsername()</span> <span id=Codehighlighter1_72_583_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_72_583_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">ContextHolder.getContext();<br></span><span style="COLOR: #008080">&nbsp;7</span> <span style="COLOR: #000000"><img id=Codehighlighter1_143_562_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_562_Open_Text.style.display='none'; Codehighlighter1_143_562_Closed_Image.style.display='inline'; Codehighlighter1_143_562_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_143_562_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_562_Closed_Text.style.display='none'; Codehighlighter1_143_562_Open_Image.style.display='inline'; Codehighlighter1_143_562_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_143_562_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_143_562_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span> <span style="COLOR: #000000"><img id=Codehighlighter1_187_556_Open_Image onclick="this.style.display='none'; Codehighlighter1_187_556_Open_Text.style.display='none'; Codehighlighter1_187_556_Closed_Image.style.display='inline'; Codehighlighter1_187_556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_187_556_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_187_556_Closed_Text.style.display='none'; Codehighlighter1_187_556_Open_Image.style.display='inline'; Codehighlighter1_187_556_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;SecureContext)</span> <span id=Codehighlighter1_187_556_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_187_556_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecureContext&nbsp;sc</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">(SecureContext)context;<br></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentication&nbsp;auth</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">sc.getAuthentication();<br></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"><img id=Codehighlighter1_312_548_Open_Image onclick="this.style.display='none'; Codehighlighter1_312_548_Open_Text.style.display='none'; Codehighlighter1_312_548_Closed_Image.style.display='inline'; Codehighlighter1_312_548_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_312_548_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_312_548_Closed_Text.style.display='none'; Codehighlighter1_312_548_Open_Image.style.display='inline'; Codehighlighter1_312_548_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(auth</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_312_548_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_312_548_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;principal</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">auth.getPrincipal();<br></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000"><img id=Codehighlighter1_409_480_Open_Image onclick="this.style.display='none'; Codehighlighter1_409_480_Open_Text.style.display='none'; Codehighlighter1_409_480_Closed_Image.style.display='inline'; Codehighlighter1_409_480_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_409_480_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_409_480_Closed_Text.style.display='none'; Codehighlighter1_409_480_Open_Image.style.display='inline'; Codehighlighter1_409_480_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(principal&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;UserDetails)&nbsp;</span> <span id=Codehighlighter1_409_480_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_409_480_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;((UserDetails)principal).getUsername();<br></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000"><img id=Codehighlighter1_485_538_Open_Image onclick="this.style.display='none'; Codehighlighter1_485_538_Open_Text.style.display='none'; Codehighlighter1_485_538_Closed_Image.style.display='inline'; Codehighlighter1_485_538_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_485_538_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_485_538_Closed_Text.style.display='none'; Codehighlighter1_485_538_Open_Image.style.display='inline'; Codehighlighter1_485_538_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #0000ff">else</span> <span id=Codehighlighter1_485_538_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_485_538_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;principal.toString();<br></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000"><img id=Codehighlighter1_587_622_Open_Image onclick="this.style.display='none'; Codehighlighter1_587_622_Open_Text.style.display='none'; Codehighlighter1_587_622_Closed_Image.style.display='inline'; Codehighlighter1_587_622_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_587_622_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_587_622_Closed_Text.style.display='none'; Codehighlighter1_587_622_Open_Image.style.display='inline'; Codehighlighter1_587_622_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span id=Codehighlighter1_587_622_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span> <span id=Codehighlighter1_587_622_Open_Text><span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"><br></span><span style="COLOR: #008080">24</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;取得当前用户密码<br></span><span style="COLOR: #008080">25</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="COLOR: #808080">@return</span> <span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">*/</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000"><img id=Codehighlighter1_660_1155_Open_Image onclick="this.style.display='none'; Codehighlighter1_660_1155_Open_Text.style.display='none'; Codehighlighter1_660_1155_Closed_Image.style.display='inline'; Codehighlighter1_660_1155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_660_1155_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_660_1155_Closed_Text.style.display='none'; Codehighlighter1_660_1155_Open_Image.style.display='inline'; Codehighlighter1_660_1155_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">&nbsp;String&nbsp;getPassword()</span> <span id=Codehighlighter1_660_1155_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_660_1155_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">ContextHolder.getContext();<br></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000"><img id=Codehighlighter1_731_1134_Open_Image onclick="this.style.display='none'; Codehighlighter1_731_1134_Open_Text.style.display='none'; Codehighlighter1_731_1134_Closed_Image.style.display='inline'; Codehighlighter1_731_1134_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_731_1134_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_731_1134_Closed_Text.style.display='none'; Codehighlighter1_731_1134_Open_Image.style.display='inline'; Codehighlighter1_731_1134_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_731_1134_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_731_1134_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000"><img id=Codehighlighter1_775_1128_Open_Image onclick="this.style.display='none'; Codehighlighter1_775_1128_Open_Text.style.display='none'; Codehighlighter1_775_1128_Closed_Image.style.display='inline'; Codehighlighter1_775_1128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_775_1128_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_775_1128_Closed_Text.style.display='none'; Codehighlighter1_775_1128_Open_Image.style.display='inline'; Codehighlighter1_775_1128_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;SecureContext)</span> <span id=Codehighlighter1_775_1128_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_775_1128_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecureContext&nbsp;sc</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">(SecureContext)context;<br></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentication&nbsp;auth</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">sc.getAuthentication();<br></span><span style="COLOR: #008080">33</span> <span style="COLOR: #000000"><img id=Codehighlighter1_900_1120_Open_Image onclick="this.style.display='none'; Codehighlighter1_900_1120_Open_Text.style.display='none'; Codehighlighter1_900_1120_Closed_Image.style.display='inline'; Codehighlighter1_900_1120_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_900_1120_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_900_1120_Closed_Text.style.display='none'; Codehighlighter1_900_1120_Open_Image.style.display='inline'; Codehighlighter1_900_1120_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(auth</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_900_1120_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_900_1120_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">34</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;principal</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">auth.getPrincipal();<br></span><span style="COLOR: #008080">35</span> <span style="COLOR: #000000"><img id=Codehighlighter1_997_1068_Open_Image onclick="this.style.display='none'; Codehighlighter1_997_1068_Open_Text.style.display='none'; Codehighlighter1_997_1068_Closed_Image.style.display='inline'; Codehighlighter1_997_1068_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_997_1068_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_997_1068_Closed_Text.style.display='none'; Codehighlighter1_997_1068_Open_Image.style.display='inline'; Codehighlighter1_997_1068_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(principal&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;UserDetails)&nbsp;</span> <span id=Codehighlighter1_997_1068_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_997_1068_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">36</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;((UserDetails)principal).getPassword();<br></span><span style="COLOR: #008080">37</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1073_1110_Open_Image onclick="this.style.display='none'; Codehighlighter1_1073_1110_Open_Text.style.display='none'; Codehighlighter1_1073_1110_Closed_Image.style.display='inline'; Codehighlighter1_1073_1110_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1073_1110_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1073_1110_Closed_Text.style.display='none'; Codehighlighter1_1073_1110_Open_Image.style.display='inline'; Codehighlighter1_1073_1110_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #0000ff">else</span> <span id=Codehighlighter1_1073_1110_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1073_1110_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">38</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">39</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">42</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1159_1164_Open_Image onclick="this.style.display='none'; Codehighlighter1_1159_1164_Open_Text.style.display='none'; Codehighlighter1_1159_1164_Closed_Image.style.display='inline'; Codehighlighter1_1159_1164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_1159_1164_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1159_1164_Closed_Text.style.display='none'; Codehighlighter1_1159_1164_Open_Image.style.display='inline'; Codehighlighter1_1159_1164_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span id=Codehighlighter1_1159_1164_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span> <span id=Codehighlighter1_1159_1164_Open_Text><span style="COLOR: #008000">/**</span> <span style="COLOR: #008000">&nbsp;</span> <span style="COLOR: #008000">*/</span> </span><span id=Codehighlighter1_1165_1226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span> <span id=Codehighlighter1_1165_1226_Open_Text><span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;取得当前用户ｓｅｓｓｉｏｎ　ｉｄ<br></span><span style="COLOR: #008080">47</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="COLOR: #808080">@return</span> <span style="COLOR: #008000">&nbsp;sessionid&nbsp;or&nbsp;null<br></span><span style="COLOR: #008080">48</span> <span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">*/</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1265_1779_Open_Image onclick="this.style.display='none'; Codehighlighter1_1265_1779_Open_Text.style.display='none'; Codehighlighter1_1265_1779_Closed_Image.style.display='inline'; Codehighlighter1_1265_1779_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_1265_1779_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1265_1779_Closed_Text.style.display='none'; Codehighlighter1_1265_1779_Open_Image.style.display='inline'; Codehighlighter1_1265_1779_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">&nbsp;String&nbsp;getSessionID()</span> <span id=Codehighlighter1_1265_1779_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1265_1779_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">50</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">ContextHolder.getContext();<br></span><span style="COLOR: #008080">51</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1336_1758_Open_Image onclick="this.style.display='none'; Codehighlighter1_1336_1758_Open_Text.style.display='none'; Codehighlighter1_1336_1758_Closed_Image.style.display='inline'; Codehighlighter1_1336_1758_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1336_1758_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1336_1758_Closed_Text.style.display='none'; Codehighlighter1_1336_1758_Open_Image.style.display='inline'; Codehighlighter1_1336_1758_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_1336_1758_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1336_1758_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">52</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1380_1752_Open_Image onclick="this.style.display='none'; Codehighlighter1_1380_1752_Open_Text.style.display='none'; Codehighlighter1_1380_1752_Closed_Image.style.display='inline'; Codehighlighter1_1380_1752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1380_1752_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1380_1752_Closed_Text.style.display='none'; Codehighlighter1_1380_1752_Open_Image.style.display='inline'; Codehighlighter1_1380_1752_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(context&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;SecureContext)</span> <span id=Codehighlighter1_1380_1752_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1380_1752_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">53</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecureContext&nbsp;sc</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">(SecureContext)context;<br></span><span style="COLOR: #008080">54</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentication&nbsp;auth</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">sc.getAuthentication();<br></span><span style="COLOR: #008080">55</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1505_1744_Open_Image onclick="this.style.display='none'; Codehighlighter1_1505_1744_Open_Text.style.display='none'; Codehighlighter1_1505_1744_Closed_Image.style.display='inline'; Codehighlighter1_1505_1744_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1505_1744_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1505_1744_Closed_Text.style.display='none'; Codehighlighter1_1505_1744_Open_Image.style.display='inline'; Codehighlighter1_1505_1744_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(auth</span> <span style="COLOR: #000000">!=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">)</span> <span id=Codehighlighter1_1505_1744_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1505_1744_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">56</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;details</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">auth.getDetails();<br></span><span style="COLOR: #008080">57</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1609_1692_Open_Image onclick="this.style.display='none'; Codehighlighter1_1609_1692_Open_Text.style.display='none'; Codehighlighter1_1609_1692_Closed_Image.style.display='inline'; Codehighlighter1_1609_1692_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1609_1692_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1609_1692_Closed_Text.style.display='none'; Codehighlighter1_1609_1692_Open_Image.style.display='inline'; Codehighlighter1_1609_1692_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">(details&nbsp;</span> <span style="COLOR: #0000ff">instanceof</span> <span style="COLOR: #000000">&nbsp;WebAuthenticationDetails)&nbsp;</span> <span id=Codehighlighter1_1609_1692_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1609_1692_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">58</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;((WebAuthenticationDetails)details).getSessionId();<br></span><span style="COLOR: #008080">59</span> <span style="COLOR: #000000"><img id=Codehighlighter1_1697_1734_Open_Image onclick="this.style.display='none'; Codehighlighter1_1697_1734_Open_Text.style.display='none'; Codehighlighter1_1697_1734_Closed_Image.style.display='inline'; Codehighlighter1_1697_1734_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top> <img id=Codehighlighter1_1697_1734_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1697_1734_Closed_Text.style.display='none'; Codehighlighter1_1697_1734_Open_Image.style.display='inline'; Codehighlighter1_1697_1734_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #0000ff">else</span> <span id=Codehighlighter1_1697_1734_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_1697_1734_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">60</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">61</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">63</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">64</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">65</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">66</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span> </span><span style="COLOR: #000000"><br></span>
<img src ="http://www.blogjava.net/LiuTing/aggbug/118673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LiuTing/" target="_blank">LiuTing</a> 2007-05-20 12:43 <a href="http://www.blogjava.net/LiuTing/archive/2007/05/20/118673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acegi使用2</title><link>http://www.blogjava.net/LiuTing/archive/2007/05/20/118671.html</link><dc:creator>LiuTing</dc:creator><author>LiuTing</author><pubDate>Sun, 20 May 2007 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/LiuTing/archive/2007/05/20/118671.html</guid><wfw:comment>http://www.blogjava.net/LiuTing/comments/118671.html</wfw:comment><comments>http://www.blogjava.net/LiuTing/archive/2007/05/20/118671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LiuTing/comments/commentRss/118671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LiuTing/services/trackbacks/118671.html</trackback:ping><description><![CDATA[<p>流程说完了，接下对上面提到的问题解释一下： <br></p>
<div class=quote_title>引用</div>
<div class=quote_div><br>先使用URL拦截的方式去对付大多数的情况，然后少数URL搞不定的再加一个接口，让Action自己去判别。这样用两个拦截器对Action进行拦截，如果Action实现了hasPermission接口，那么就交给Action自己判断，如果Action没有该接口，就查找内部的URL和权限的对照表来判断。 <br></div>
<p>&nbsp;</p>
<p>这个情况比较复杂，因为是要对Action进行调用，所以要看使用的web框架来定夺。是用不同Web框架要是用不同的Web框架拦截器。所以恐怕acegi力不从心，挺多在filter里面配置一下是否要是用Action自身校验。但是想法很好，赞。</p>
<p>&nbsp;</p>
<div class=quote_title>引用</div>
<div class=quote_div><br>你怎么把信息有效的传递给Web层和其他的Facade层进行用户友好性的提示处理？ <br></div>
<p>&nbsp;</p>
<p>acegi校验失败的时候会抛出AuthenticationException异常，然后放在session里面， <br>在错误转向页面可以这样是用 <br></p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;%=</span><span style="COLOR: #000000">&nbsp;((AuthenticationException)&nbsp;session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage()&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;%=</span><span style="COLOR: #000000">&nbsp;session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY)&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;%=</span><span style="COLOR: #000000">&nbsp;session.getAttribute(SecurityEnforcementFilter.ACEGI_SECURITY_ACCESS_DENIED_EXCEPTION_KEY)&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000">&nbsp;</span></div>
</div>
<br>不过这么用实在太难看了，晕了。可以自己用tag来搞定
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class=quote_title>引用</div>
<div class=quote_div><br>很多系统需要根据权限不同，生成不同的UI组件(例如管理员的菜单和普通用户菜单就肯定不一样)，这也需要在Web层的View进行控制。 <br></div>
<br>acegi对View的处理就是使用tag,原来的acegi好像没有什么tag，简直是烂，现在有了tag，说一下是用的方法，但是说实话他的tag实在是不够强。
<p>&nbsp;</p>
<p>老版的web.xml <br></p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib-uri</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://acegisecurity.sf.net/authz</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib-uri</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib-location</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/authz.tld</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib-location</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<br>在页面中使用 <br>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">authz:authorize&nbsp;</span><span style="COLOR: #ff0000">ifAllGranted</span><span style="COLOR: #0000ff">="ROLE_SUPERVISOR"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">td</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">A&nbsp;</span><span style="COLOR: #ff0000">HREF</span><span style="COLOR: #0000ff">="del.htm?id=&lt;c:out&nbsp;value="</span><span style="COLOR: #ff0000">/${contact.id}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">"&gt;Del</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">A</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">td</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">authz:authorize</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<br>ifAllGranted是说所有的权限都有，用','分割权限 <br>可以替换成ifAnyGranted: ifNotGranted:
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">authz:authentication&nbsp;</span><span style="COLOR: #ff0000">operation</span><span style="COLOR: #0000ff">="username"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span></div>
</div>
<p>&nbsp;</p>
<p>这个是用来显示你的权限信息的。</p>
<p>&nbsp;</p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">authz:acl&nbsp;</span><span style="COLOR: #ff0000">domainObject</span><span style="COLOR: #0000ff">="${contact}"</span><span style="COLOR: #ff0000">&nbsp;hasPermission</span><span style="COLOR: #0000ff">="16,1"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">td</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">A&nbsp;</span><span style="COLOR: #ff0000">HREF</span><span style="COLOR: #0000ff">="&lt;c:url&nbsp;value="</span><span style="COLOR: #ff0000">del.htm"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">c:param&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="contactId"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>value</span><span style="COLOR: #0000ff">="${contact.id}"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">c:url</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">"&gt;Del</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">A</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">td</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">authz:acl</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<img src ="http://www.blogjava.net/LiuTing/aggbug/118671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LiuTing/" target="_blank">LiuTing</a> 2007-05-20 12:42 <a href="http://www.blogjava.net/LiuTing/archive/2007/05/20/118671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acegi使用1 </title><link>http://www.blogjava.net/LiuTing/archive/2007/05/20/118670.html</link><dc:creator>LiuTing</dc:creator><author>LiuTing</author><pubDate>Sun, 20 May 2007 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/LiuTing/archive/2007/05/20/118670.html</guid><wfw:comment>http://www.blogjava.net/LiuTing/comments/118670.html</wfw:comment><comments>http://www.blogjava.net/LiuTing/archive/2007/05/20/118670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LiuTing/comments/commentRss/118670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LiuTing/services/trackbacks/118670.html</trackback:ping><description><![CDATA[<p>首先要配置一个filter，这个filter用一个代理bean写在了spring里面，其实根正常的filter没有任何区别。 <br></p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="securityEnforcementFilter"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="COLOR: #0000ff">="org.acegisecurity.intercept.web.SecurityEnforcementFilter"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="filterSecurityInterceptor"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="filterInvocationInterceptor"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="authenticationEntryPoint"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="authenticationProcessingFilterEntryPoint"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<p>&nbsp;</p>
<div>"filterInvocationInterceptor" 是一个拦截器，说是拦截器，其实就是在filter里面执行一下他的拦截方法，这里可没有什么aop. <br>authenticationEntryPoint 交验失败的时候转到的地方，为什么说是地方，因为通过配置可以转到其它的url甚至其它的协议下(http 转到 https等等)</div>
<div>&nbsp;</div>
<div>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="authenticationProcessingFilterEntryPoint"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="COLOR: #0000ff">="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="loginFormUrl"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/error.security</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="forceHttps"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">false</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
</div>
<p>&nbsp;</p>
<p>这个就是失败的时候转到的地方，我们可以配置url和是否使用https</p>
<p>&nbsp;</p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="filterInvocationInterceptor"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="COLOR: #0000ff">="org.acegisecurity.intercept.web.FilterSecurityInterceptor"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="authenticationManager"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="authenticationManager"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="accessDecisionManager"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="httpRequestAccessDecisionManager"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="objectDefinitionSource"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATTERN_TYPE_APACHE_ANT&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/index.jsp=ROLE_ANONYMOUS,ROLE_USER&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/j_acegi_switch_user=ROLE_SUPERVISOR&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/login.security=ROLE_ANONYMOUS,ROLE_USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/test.do=ROLE_CODER&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**.do*=ROLE_USER&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<p>&nbsp;</p>
<p>这个就是前面提到的拦截器。简单解释一下： <br>authenticationManager 在acegi里面的主要作用就是管理维护用户的权限角色等信息，比方说想要用户的ROLE就要在这里面拿了。里面配置了多种全县的来源，可以从DAO里面来(就是数据库里面)，可以是cookies里面的，也可以是匿名的权限，每种权限都以一种Provider的形式提供： <br></p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="authenticationManager"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="COLOR: #0000ff">="org.acegisecurity.providers.ProviderManager"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="providers"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="daoAuthenticationProvider"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="anonymousAuthenticationProvider"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="rememberMeAuthenticationProvider"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div>
</div>
<p>&nbsp;</p>
<p>objectDefinitionSource在acegi里面就是配置权限信息，说明哪一个url需要什么权限才能访问，acegi默认用&lt;value&gt;来表示，其实这正是acegi的不足之处，还好能够补救。我来说明一下： <br>我们知道在spring里面&lt;value&gt;标签比较特殊，spring首先找到这个属性的类型，然后把value里面的内容以String的类型取出来(Spring做了一下包装，为TypedString)。然后根据这个属性的类型找他的Editer，然后用Editer来处理String为需要的类型。但是我们不希望用String来表达url，很明显url里面有=就不会玩了。我们可以把这个信息写到数据库里面，然后读取，这里面不说了以前有一位高手已经解释过了。</p>
<p>接下来就是httpRequestAccessDecisionManager了，AccessDecisionManager在acegi里面是决策者，就是根据你所拥有的权限和访问URL需要的权限来决定你到底能不能访问。</p>
<p>&nbsp;</p>
<div class=code_title>代码
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="httpRequestAccessDecisionManager"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #ff0000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="COLOR: #0000ff">="org.acegisecurity.vote.AffirmativeBased"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="allowIfAllAbstainDecisions"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">false</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="decisionVoters"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref&nbsp;</span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="roleVoter"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span></div>
</div>
<p>&nbsp;</p>
<p>决策者里面是投票者，这个上面已经解释过了，一个投票者校验一种权限。整个流程已经说完了。</p>
</div>
<img src ="http://www.blogjava.net/LiuTing/aggbug/118670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LiuTing/" target="_blank">LiuTing</a> 2007-05-20 12:41 <a href="http://www.blogjava.net/LiuTing/archive/2007/05/20/118670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>