﻿<?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-云自无心水自闲-随笔分类-Spring Security</title><link>http://www.blogjava.net/usherlight/category/36798.html</link><description>天平山上白云泉，云自无心水自闲。何必奔冲山下去，更添波浪向人间！</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jun 2010 16:00:18 GMT</lastBuildDate><pubDate>Fri, 11 Jun 2010 16:00:18 GMT</pubDate><ttl>60</ttl><item><title>Spring Security - Using custom Authentication Processing Filter</title><link>http://www.blogjava.net/usherlight/archive/2010/06/11/323293.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Fri, 11 Jun 2010 00:12:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/06/11/323293.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/323293.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/06/11/323293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/323293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/323293.html</trackback:ping><description><![CDATA[Recently I got a chance working with Spring security, formerly known as Acegi Security for spring. While working with the framework, I heard comments from friends and colleagues saying that spring security lacks proper documentation. So thought of sharing a little knowledge. By the way, this is first ever blog posting and kindly excuse me and let me know any errors and improvements.

Spring security offers a simple configuration based security for your web applications helping you secure your web application with out littering your business logic with any security code. It provides securing URL's based on the Role (Authorities), securing your business methods based on the ACL's.

The first step in hooking up the spring security to your web application is by specifying the DelegatingFilterProxy in your web.xml.

<!--Spring security filter-->
<filter>
 <filter-name>springSecurityFilterChain</filter-name>
 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter
 <filter-mapping>
 <filter-name>springSecurityFilterChain</filter-name>
 <url-pattern>/*</url-pattern>
 <dispatcher>REQUEST</dispatcher>
 <dispatcher>INCLUDE</dispatcher>
 <dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!--End spring security filter-->


If you want to externalize all of your security related configuration into a separate file, you can do so and add that to your context location param.
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>
 /WEB-INF/beans.xml , /WEB-INF/springSecurity.xml </param-value>
</context-param>


Now comes the part of security configuration for your application, Adding the URL security patterns is pretty simple and straight forward. Add all the URL patterns which you want to secure and add the wild card pattern at the end. You need to have some default principal and role even for non logged in users as you need to give access to pages like log in, register and forgot password kind of functionality even to non logged in users.

I tried to add comments to pretty much every element which I am using here.
As an example I added just a wild card intercept url which make every page of my application secure. You need to exclude different urls based on the roles.



 <security:http entry-point-ref="myAuthenticationEntryPoint" session-fixation-protection="newSession" >
 <!--add any of your cusotom url patterns to protect--> <security:intercept-url pattern="/login/**" access="ROLE_ANONYMOUS"/> <security:intercept-url pattern="/register/**" access="ROLE_ANONYMOUS"/>
 <security:intercept-url pattern="/**" access="ROLE_USER"/>
 <security:logout logout-success-url="/home.htm"/>
 <security:anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
 </security:http>
 <!--name of my authenticationManager is authenticationManager-->
 <security:authentication-manager alias="authenticationManager"/>
 <!--Cutom login filter which replaces the default AUTHENTICATION_PROCESSING_FILTER -->
 <bean id="customizedFormLoginFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter" >
 <security:custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/><!--replace the default one-->
 <property name="defaultTargetUrl" value="/main.htm"/><!--After a successful login, the user will be taken to this page-->
 <property name="authenticationFailureUrl" value="/home.htm?error=true" /><!--Authentication failed? take him to error page-->
 <property name="authenticationManager" ref="myAuthenticationManager"/> <!--Here it is the custom authenticationManager, login magic goes here -->
 <property name="allowSessionCreation" value="true" /> <!--Allow the application to create sessions-->
 </bean>
 <!--My custom auth manager-->
 <bean id="myAuthenticationManager" class="com.teja.security.CustomAuthunticationManager" />
 <!-- Automatically receives AuthenticationEvent messages -->
 <bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>
 <!--My authuntication entry point, can be replaced easily if we are doing custom commence of invalid auths.-->
 <bean id="myAuthenticationEntryPoint"
 class="com.teja.security.CustomAuthenticationEntryPoint" >
 <property name="loginFormUrl" value="/home.htm"/>
 </bean>

Following is my custom implementation of AuthenticationEntryPoint, which currently is not doing any thing except leveraging the commence to its super class which is the spring implementation of AuthenticationProcessingFilterEntryPoint. I hooked it to add any custom logic.

public class CustomAuthenticationEntryPoint extends AuthenticationProcessingFilterEntryPoint {
 private static final Log logger = LogFactory.getLog(CustomAuthenticationEntryPoint.class);
 

 @Override
 public void commence(ServletRequest request, ServletResponse response, AuthenticationException authException) throws IOException, ServletException {
 super.commence(request, response, authException);
 }
}

This is my custom authentication manager which actually does the custom login of the user. It will throw an BadCredentialsException in case of invalid credentials or thorws a AuthenticationServiceException in case of a service error (Database error, SQL error or any other error).

public class CustomAuthunticationManager implements AuthenticationManager {
 @Autowired
 UserManagerService userManagerService;
 public Authentication authenticate(Authentication authentication) throws AuthenticationException {
 if(StringUtils.isBlank((String) authentication.getPrincipal()) || StringUtils.isBlank((String) authentication.getCredentials())){
 throw new BadCredentialsException("Invalid username/password");
 }
 User user = null;
 GrantedAuthority[] grantedAuthorities = null;
 try{
 user = userManagerService.getUser((String) authentication.getPrincipal(), (String) authentication.getCredentials());
 }
 catch(InvalidCredentialsException ex){
 throw new BadCredentialsException(ex.getMessage());
 }
 catch(Exception e){
 throw new AuthenticationServiceException("Currently we are unable to process your request. Kindly try again later.");
 }
 if (user != null) {
 List<Role> roles = user.getAssociatedRoles();
 grantedAuthorities = new GrantedAuthority[roles.size()];
 for (int i = 0; i &lt; roles.size(); i++) {
 Role role = roles.get(i);
 GrantedAuthority authority = new GrantedAuthorityImpl(role.getRoleCode());
 grantedAuthorities[i] = authority;
 }
 }
 else{
 throw new BadCredentialsException("Invalid username/password");
 }
 return new UsernamePasswordAuthenticationToken(user, authentication.getCredentials(), grantedAuthorities);
 }
}


At the client side (jsp), the simple configuration you need to do is post the request to"/j_spring_security_check" with parameters "j_username" and "j_password".

That's pretty much all you need to do for enabling spring security to your existing web application. I will try to explain about doing the method security using ACL's and configuring the view using spring security tags in another post.<img src ="http://www.blogjava.net/usherlight/aggbug/323293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-06-11 08:12 <a href="http://www.blogjava.net/usherlight/archive/2010/06/11/323293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry最新版5.1.0.5教程（九）：权限控制框架的实现-进阶篇</title><link>http://www.blogjava.net/usherlight/archive/2010/02/04/312016.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Thu, 04 Feb 2010 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/02/04/312016.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/312016.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/02/04/312016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/312016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/312016.html</trackback:ping><description><![CDATA[<p>在上一篇中我们研究了如何实现SpringSecurity中Jsp Tag的&lt;security:authorize ifAllGranted="ROLE_SUPERVISOR"&gt;的功能。这一次我们一起研究一下如何实现在Tapestry5.1中添加一个Filter来对所有的操作进行权限的过滤控制。<br />
在SpringSecurity中，我们一般是在application-context.xml中，添加一个SpringSecurity的Filter，然后在另外一个xml中详细配置如何根据Url的规则进行权限的控制。而Tapestry的哲学是尽量减少Xml中的配置（其IOC容器也基本上是借鉴Guice而不Spring的），所以我们也是在代码中实现权限规则的控制。<br />
总体上来看，可以用两种方式来实现url规则，一种是Request级别的Filter，一种是页面组件级别的Filter，如果是Request级别的话，可以从Request对象中获取Url路径，这样就与SpringSecurity基本一样了。本文主要介绍页面组件级别的Filter，从中我们也可以体会到Tapestry5.1中的IOC容器的强大和便利。</p>
<p>这就是Filter的代码，这个Filter必须实现ComponentRequestFilter接口。值得注意的是其构造函数所需要用到的4个参数，这4个参数都是Tapestry5本身自有的服务，所以我们什么也不用做，Tapestry5自动会将服务的实例注入进来，这就是Tapestry-IOC的威力。<br />
ComponentRequestFilter接口一共有4个方法需要实现，具体代码如下：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RequiresLoginFilter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ComponentRequestFilter&nbsp;{<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;PageRenderLinkSource&nbsp;renderLinkSource;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;ComponentSource&nbsp;componentSource;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Response&nbsp;response;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;ApplicationStateManager&nbsp;appStateManager;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;RequiresLoginFilter(PageRenderLinkSource&nbsp;renderLinkSource,<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComponentSource&nbsp;componentSource,&nbsp;Response&nbsp;response,<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationStateManager&nbsp;appStateManager<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;{<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.renderLinkSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;renderLinkSource;<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.componentSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;componentSource;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;response;<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.appStateManager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;appStateManager;<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;handleComponentEvent(<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComponentEventRequestParameters&nbsp;parameters,<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComponentRequestHandler&nbsp;handler)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dispatchedToLoginPage(parameters.getActivePageName()))&nbsp;{<br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler.handleComponentEvent(parameters);<br />
</span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;handlePageRender(PageRenderRequestParameters&nbsp;parameters,<br />
</span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComponentRequestHandler&nbsp;handler)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dispatchedToLoginPage(parameters.getLogicalPageName()))&nbsp;{<br />
</span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
</span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler.handlePageRender(parameters);<br />
</span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;dispatchedToLoginPage(String&nbsp;pageName)&nbsp;{<br />
</span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Component&nbsp;page&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;componentSource.getPage(pageName);<br />
</span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(page.getClass().isAnnotationPresent(RequiresLogin.</span><span style="color: #0000ff">class</span><span style="color: #000000">))&nbsp;{<br />
</span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;appStateManager.exists(Authentication.</span><span style="color: #0000ff">class</span><span style="color: #000000">))&nbsp;{<br />
</span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect();<br />
</span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentication&nbsp;auth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;appStateManager.get(Authentication.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;auth&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;)&nbsp;{<br />
</span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect();<br />
</span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;auth.isLoggedIn())&nbsp;{<br />
</span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect();<br />
</span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequiresLogin&nbsp;requireLogin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;page.getClass().getAnnotation(<br />
</span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequiresLogin.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ifNotGranted&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;requireLogin.ifNotGranted();<br />
</span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ifAllGranted&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;requireLogin.ifAllGranted();<br />
</span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ifAnyGranted&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;requireLogin.ifAnyGranted();<br />
</span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;permitted&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;auth.checkPermission(ifNotGranted,&nbsp;ifAllGranted,&nbsp;ifAnyGranted);<br />
</span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;permitted&nbsp;)&nbsp;{<br />
</span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&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">false</span><span style="color: #000000">;<br />
</span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;redirect()&nbsp;{<br />
</span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Link&nbsp;link&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;renderLinkSource.createPageRenderLink(</span><span style="color: #000000">"</span><span style="color: #000000">Logout</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
</span><span style="color: #008080">79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.sendRedirect(link);<br />
</span><span style="color: #008080">80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080">81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">83</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">84</span>&nbsp;<span style="color: #000000">}</span></div>
<br />
<p>在ComponentRequestFilter中，我们无法使用@SessionState注解来直接注入Session中的变量，但是我们可以通过ApplicationStateManager来取得。</p>
<p>现在我们需要把刚定义的Filter注册到系统中，很简单，只要在AppModule中添加以下函数就行了：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;contributeComponentRequestHandler(<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OrderedConfiguration</span><span style="color: #000000">&lt;</span><span style="color: #000000">ComponentRequestFilter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;configuration)&nbsp;{<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration.addInstance(</span><span style="color: #000000">"</span><span style="color: #000000">RequiresLogin</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;RequiresLoginFilter.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">5</span>&nbsp;</div>
从本例子中我们可以看到Tapesty Ioc容器使用的便利性，也认识到了Ioc容器在Tapestry体系中的重要性<img src ="http://www.blogjava.net/usherlight/aggbug/312016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-02-04 19:17 <a href="http://www.blogjava.net/usherlight/archive/2010/02/04/312016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry最新版5.1.0.5教程（八）：权限控制框架的实现-基础篇</title><link>http://www.blogjava.net/usherlight/archive/2010/01/12/309226.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Tue, 12 Jan 2010 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/01/12/309226.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/309226.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/01/12/309226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/309226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/309226.html</trackback:ping><description><![CDATA[Tapestry中并没有类似于Spring Security这样的专门的权限框架。对此Tapestry的作者Lewis认为主要是用户对于权限的要求实在太多变化了。他认为很难抽象出一个通用的权限框架来满足所有的用户，所以他干脆就不费事去做这件事了。但其实我们很容易就能利用Tapestry已有的工具来完成类似于SpringSecurity的功能。<br />
本文主要介绍如何实现类似于SpringSecurity的jsp tag的功能。在Tapestry中，利用Components实现这一点非常容易。<br />
其基本原理是Tapestry5中一个页面或者组件的渲染生成过程是基于一个状态机和队列完成的。这样，渲染生成过程就被细分成了很多个小模块，我们可以非常容易地覆写这些小模块。具体内容详见官方文档：http://tapestry.apache.org/tapestry5.1/guide/rendering.html。如果权限校验不通过，我们就可以控制不显示组件的内容。<br />
我们这里就是主要依赖这个过程来实现在页面这一层面对权限进行校验和控制。<br />
代码主要包含两大部分，一个组件和一个用于权限控制的服务。<br />
参考了Tapestry-Spring-Security的实现，我也将组件命名为IfRole（当然，我们也可以和Tapestry-Spring-Security一样，也再生成一个IfLoggedIn组件）。权限控制的服务我命名为：AuthenticationService。<br />
主要的实现思路：<br />
将AuthenticationService申明为SessionState变量。这样这个变量就可以在所有的页面和组件之间很方便地共享了。一般情况下，是在登录页面对AuthenticationService进行赋值，而在退出页面清空AuthenticationService这个变量。<br />
代码（这部分代码完全根据应用的需求进自行更改）：<br />
AuthenticationService的代码：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_35_1600_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_1600_Open_Text.style.display='none'; Codehighlighter1_35_1600_Closed_Image.style.display='inline'; Codehighlighter1_35_1600_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_35_1600_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_35_1600_Closed_Text.style.display='none'; Codehighlighter1_35_1600_Open_Image.style.display='inline'; Codehighlighter1_35_1600_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AuthenticationService&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_35_1600_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_35_1600_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;privilegeList;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;privilegeList&nbsp;的getter&nbsp;and&nbsp;setter</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;checkPermission(String&nbsp;ifNotGranted,&nbsp;String&nbsp;ifAllGranted,<br />
<img id="Codehighlighter1_228_1598_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_1598_Open_Text.style.display='none'; Codehighlighter1_228_1598_Closed_Image.style.display='inline'; Codehighlighter1_228_1598_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_228_1598_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_228_1598_Closed_Text.style.display='none'; Codehighlighter1_228_1598_Open_Image.style.display='inline'; Codehighlighter1_228_1598_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ifAnyGranted)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_228_1598_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_228_1598_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;ifAllGranted)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifAllGranted))<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;ifAnyGranted)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifAnyGranted))<br />
<img id="Codehighlighter1_437_473_Open_Image" onclick="this.style.display='none'; Codehighlighter1_437_473_Open_Text.style.display='none'; Codehighlighter1_437_473_Closed_Image.style.display='inline'; Codehighlighter1_437_473_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_437_473_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_437_473_Closed_Text.style.display='none'; Codehighlighter1_437_473_Open_Image.style.display='inline'; Codehighlighter1_437_473_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;ifNotGranted)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifNotGranted)))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_437_473_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_437_473_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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">false</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_540_830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_540_830_Open_Text.style.display='none'; Codehighlighter1_540_830_Closed_Image.style.display='inline'; Codehighlighter1_540_830_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_540_830_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_540_830_Closed_Text.style.display='none'; Codehighlighter1_540_830_Open_Image.style.display='inline'; Codehighlighter1_540_830_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ifNotGranted)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifNotGranted))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_540_830_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_540_830_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;st&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringTokenizer(ifNotGranted,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_654_820_Open_Image" onclick="this.style.display='none'; Codehighlighter1_654_820_Open_Text.style.display='none'; Codehighlighter1_654_820_Closed_Image.style.display='inline'; Codehighlighter1_654_820_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_654_820_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_654_820_Closed_Text.style.display='none'; Codehighlighter1_654_820_Open_Image.style.display='inline'; Codehighlighter1_654_820_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(st.hasMoreTokens())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_654_820_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_654_820_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;st.nextToken();<br />
<img id="Codehighlighter1_754_806_Open_Image" onclick="this.style.display='none'; Codehighlighter1_754_806_Open_Text.style.display='none'; Codehighlighter1_754_806_Closed_Image.style.display='inline'; Codehighlighter1_754_806_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_754_806_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_754_806_Closed_Text.style.display='none'; Codehighlighter1_754_806_Open_Image.style.display='inline'; Codehighlighter1_754_806_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(privilegeList.contains(value))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_754_806_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_754_806_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_897_1188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_897_1188_Open_Text.style.display='none'; Codehighlighter1_897_1188_Closed_Image.style.display='inline'; Codehighlighter1_897_1188_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_897_1188_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_897_1188_Closed_Text.style.display='none'; Codehighlighter1_897_1188_Open_Image.style.display='inline'; Codehighlighter1_897_1188_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ifAllGranted)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifAllGranted))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_897_1188_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_897_1188_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;st&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringTokenizer(ifAllGranted,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_1011_1178_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1011_1178_Open_Text.style.display='none'; Codehighlighter1_1011_1178_Closed_Image.style.display='inline'; Codehighlighter1_1011_1178_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1011_1178_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1011_1178_Closed_Text.style.display='none'; Codehighlighter1_1011_1178_Open_Image.style.display='inline'; Codehighlighter1_1011_1178_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(st.hasMoreTokens())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1011_1178_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1011_1178_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;st.nextToken();<br />
<img id="Codehighlighter1_1112_1164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1112_1164_Open_Text.style.display='none'; Codehighlighter1_1112_1164_Closed_Image.style.display='inline'; Codehighlighter1_1112_1164_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1112_1164_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1112_1164_Closed_Text.style.display='none'; Codehighlighter1_1112_1164_Open_Image.style.display='inline'; Codehighlighter1_1112_1164_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">privilegeList.contains(value))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1112_1164_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1112_1164_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_1255_1570_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1255_1570_Open_Text.style.display='none'; Codehighlighter1_1255_1570_Closed_Image.style.display='inline'; Codehighlighter1_1255_1570_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1255_1570_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1255_1570_Closed_Text.style.display='none'; Codehighlighter1_1255_1570_Open_Image.style.display='inline'; Codehighlighter1_1255_1570_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ifAnyGranted)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(ifAnyGranted))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1255_1570_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1255_1570_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;st&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringTokenizer(ifAnyGranted,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_1369_1534_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1369_1534_Open_Text.style.display='none'; Codehighlighter1_1369_1534_Closed_Image.style.display='inline'; Codehighlighter1_1369_1534_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1369_1534_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1369_1534_Closed_Text.style.display='none'; Codehighlighter1_1369_1534_Open_Image.style.display='inline'; Codehighlighter1_1369_1534_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(st.hasMoreTokens())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1369_1534_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1369_1534_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;st.nextToken();<br />
<img id="Codehighlighter1_1469_1520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1469_1520_Open_Text.style.display='none'; Codehighlighter1_1469_1520_Closed_Image.style.display='inline'; Codehighlighter1_1469_1520_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1469_1520_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1469_1520_Closed_Text.style.display='none'; Codehighlighter1_1469_1520_Open_Image.style.display='inline'; Codehighlighter1_1469_1520_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(privilegeList.contains(value))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1469_1520_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1469_1520_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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">false</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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">true</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<br />
IfRole的代码（这个类需要放在Components目录下）：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_20_1570_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_1570_Open_Text.style.display='none'; Codehighlighter1_20_1570_Closed_Image.style.display='inline'; Codehighlighter1_20_1570_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_20_1570_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_20_1570_Closed_Text.style.display='none'; Codehighlighter1_20_1570_Open_Image.style.display='inline'; Codehighlighter1_20_1570_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IfRole&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_20_1570_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_20_1570_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_26_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_246_Open_Text.style.display='none'; Codehighlighter1_26_246_Closed_Image.style.display='inline'; Codehighlighter1_26_246_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_26_246_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_26_246_Closed_Text.style.display='none'; Codehighlighter1_26_246_Open_Image.style.display='inline'; Codehighlighter1_26_246_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_26_246_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_26_246_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;A&nbsp;comma-separated&nbsp;list&nbsp;of&nbsp;roles&nbsp;is&nbsp;supplied&nbsp;to&nbsp;one&nbsp;or&nbsp;more&nbsp;of&nbsp;the<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;following&nbsp;parameters.&nbsp;If&nbsp;none&nbsp;are&nbsp;supplied,&nbsp;the&nbsp;default&nbsp;behavior&nbsp;is&nbsp;to<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;forbid&nbsp;access.&nbsp;Behavior&nbsp;should&nbsp;be&nbsp;self-explanatory.<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Parameter(required&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;defaultPrefix&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">literal</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;ifAllGranted;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Parameter(required&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;defaultPrefix&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">literal</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;ifAnyGranted;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Parameter(required&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;defaultPrefix&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">literal</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;ifNotGranted;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_534_686_Open_Image" onclick="this.style.display='none'; Codehighlighter1_534_686_Open_Text.style.display='none'; Codehighlighter1_534_686_Closed_Image.style.display='inline'; Codehighlighter1_534_686_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_534_686_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_534_686_Closed_Text.style.display='none'; Codehighlighter1_534_686_Open_Image.style.display='inline'; Codehighlighter1_534_686_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_534_686_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_534_686_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;An&nbsp;alternate&nbsp;{</span><span style="color: #808080">@link</span><span style="color: #008000">&nbsp;Block}&nbsp;to&nbsp;render&nbsp;if&nbsp;the&nbsp;test&nbsp;parameter&nbsp;is&nbsp;false.&nbsp;The&nbsp;default,&nbsp;null,&nbsp;means<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;render&nbsp;nothing&nbsp;in&nbsp;that&nbsp;situation.<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Parameter(name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">else</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Block&nbsp;elseBlock;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;test;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@SessionState<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;AuthenticationService&nbsp;auth;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_875_960_Open_Image" onclick="this.style.display='none'; Codehighlighter1_875_960_Open_Text.style.display='none'; Codehighlighter1_875_960_Closed_Image.style.display='inline'; Codehighlighter1_875_960_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_875_960_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_875_960_Closed_Text.style.display='none'; Codehighlighter1_875_960_Open_Image.style.display='inline'; Codehighlighter1_875_960_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;checkPermission()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_875_960_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_875_960_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;auth.checkPermission(ifNotGranted,&nbsp;ifAllGranted,&nbsp;ifAnyGranted);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_989_1029_Open_Image" onclick="this.style.display='none'; Codehighlighter1_989_1029_Open_Text.style.display='none'; Codehighlighter1_989_1029_Closed_Image.style.display='inline'; Codehighlighter1_989_1029_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_989_1029_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_989_1029_Closed_Text.style.display='none'; Codehighlighter1_989_1029_Open_Image.style.display='inline'; Codehighlighter1_989_1029_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setupRender()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_989_1029_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_989_1029_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;checkPermission();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_1036_1242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1036_1242_Open_Text.style.display='none'; Codehighlighter1_1036_1242_Closed_Image.style.display='inline'; Codehighlighter1_1036_1242_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1036_1242_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1036_1242_Closed_Text.style.display='none'; Codehighlighter1_1036_1242_Open_Image.style.display='inline'; Codehighlighter1_1036_1242_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1036_1242_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_1036_1242_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;null&nbsp;if&nbsp;the&nbsp;test&nbsp;method&nbsp;returns&nbsp;true,&nbsp;which&nbsp;allows&nbsp;normal<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;rendering&nbsp;(of&nbsp;the&nbsp;body).&nbsp;If&nbsp;the&nbsp;test&nbsp;parameter&nbsp;is&nbsp;false,&nbsp;returns&nbsp;the&nbsp;else<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;parameter&nbsp;(this&nbsp;may&nbsp;also&nbsp;be&nbsp;null).<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1269_1315_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1269_1315_Open_Text.style.display='none'; Codehighlighter1_1269_1315_Closed_Image.style.display='inline'; Codehighlighter1_1269_1315_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1269_1315_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1269_1315_Closed_Text.style.display='none'; Codehighlighter1_1269_1315_Open_Image.style.display='inline'; Codehighlighter1_1269_1315_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;beginRender()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1269_1315_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1269_1315_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;:&nbsp;elseBlock;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_1322_1504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1322_1504_Open_Text.style.display='none'; Codehighlighter1_1322_1504_Closed_Image.style.display='inline'; Codehighlighter1_1322_1504_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1322_1504_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1322_1504_Closed_Text.style.display='none'; Codehighlighter1_1322_1504_Open_Image.style.display='inline'; Codehighlighter1_1322_1504_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1322_1504_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_1322_1504_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;If&nbsp;the&nbsp;test&nbsp;method&nbsp;returns&nbsp;true,&nbsp;then&nbsp;the&nbsp;body&nbsp;is&nbsp;rendered,&nbsp;otherwise&nbsp;not.&nbsp;The&nbsp;component&nbsp;does<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;not&nbsp;have&nbsp;a&nbsp;template&nbsp;or&nbsp;do&nbsp;any&nbsp;other&nbsp;rendering&nbsp;besides&nbsp;its&nbsp;body.<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1537_1564_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1537_1564_Open_Text.style.display='none'; Codehighlighter1_1537_1564_Closed_Image.style.display='inline'; Codehighlighter1_1537_1564_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1537_1564_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1537_1564_Closed_Text.style.display='none'; Codehighlighter1_1537_1564_Open_Image.style.display='inline'; Codehighlighter1_1537_1564_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;beforeRenderBody()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1537_1564_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1537_1564_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;test;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<br />
<br />
<p>示例：<br />
1. 在登录页面：<br />
@SessionState<br />
private Authentication auth;</p>
<p>......</p>
<p>// if user name and password is valid:<br />
auth.setPrivliegeList(.....);<br />
<br />
<br />
</p>
<p>2. 在需要权限控制的页面模板中：<br />
&lt;t:ifRole ifAllGranted="admin"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; administrator can see this block<br />
&lt;/t:ifRole&gt;</p><img src ="http://www.blogjava.net/usherlight/aggbug/309226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-01-12 20:17 <a href="http://www.blogjava.net/usherlight/archive/2010/01/12/309226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>