﻿<?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-血色浪漫-随笔分类-Seam3</title><link>http://www.blogjava.net/FORRogue/category/50876.html</link><description>我会微笑着面对一切，但是与快乐无关！</description><language>zh-cn</language><lastBuildDate>Fri, 17 Feb 2012 03:21:48 GMT</lastBuildDate><pubDate>Fri, 17 Feb 2012 03:21:48 GMT</pubDate><ttl>60</ttl><item><title>Seam3 + JPA工程搭建配置</title><link>http://www.blogjava.net/FORRogue/archive/2012/02/16/370151.html</link><dc:creator>Rogue</dc:creator><author>Rogue</author><pubDate>Thu, 16 Feb 2012 15:58:00 GMT</pubDate><guid>http://www.blogjava.net/FORRogue/archive/2012/02/16/370151.html</guid><wfw:comment>http://www.blogjava.net/FORRogue/comments/370151.html</wfw:comment><comments>http://www.blogjava.net/FORRogue/archive/2012/02/16/370151.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/FORRogue/comments/commentRss/370151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FORRogue/services/trackbacks/370151.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里介绍 JBoss Seam3 工程的搭建与相关配置，使用的是Seam 3.1.0.Final 版本，服务器是 Jboss as 7.0.2.Final&nbsp; &nbsp;&nbsp;1. 首先配置Jboss as7 的JNDI数据源. 这里介绍 mysql 的配置方法，其他数据类似&nbsp; &nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/FORRogue/archive/2012/02/16/370151.html'>阅读全文</a><img src ="http://www.blogjava.net/FORRogue/aggbug/370151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FORRogue/" target="_blank">Rogue</a> 2012-02-16 23:58 <a href="http://www.blogjava.net/FORRogue/archive/2012/02/16/370151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Seam3 资源路径配置(resources)</title><link>http://www.blogjava.net/FORRogue/archive/2012/02/16/370093.html</link><dc:creator>Rogue</dc:creator><author>Rogue</author><pubDate>Thu, 16 Feb 2012 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/FORRogue/archive/2012/02/16/370093.html</guid><wfw:comment>http://www.blogjava.net/FORRogue/comments/370093.html</wfw:comment><comments>http://www.blogjava.net/FORRogue/archive/2012/02/16/370093.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/FORRogue/comments/commentRss/370093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FORRogue/services/trackbacks/370093.html</trackback:ping><description><![CDATA[<h3><span style="font-size: 12pt; color: #800080; ">Seam3 资源路径配置(resources)<br /><br /><br /></span><p><span style="font-size: 10pt; ">&nbsp; &nbsp;&nbsp;</span><span style="font-weight: normal; font-size: 10pt; ">在Seam3 中如果使用</span><span style="font-size: 10pt; ">&nbsp;</span><span style="font-weight: normal; font-size: 10pt; ">h:outputStylesheet 标签来动态的添加样式文件，直接像下面通过全路径加载进来是没有效果的。<br /></span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-size: 8pt; ">&lt;</span><span style="color: #800000; font-size: 8pt; ">h:outputStylesheet&nbsp;</span><span style="color: #ff0000; font-size: 8pt; ">library</span><span style="color: #0000ff; font-size: 8pt; ">="css"</span><span style="color: #ff0000; font-size: 8pt; ">&nbsp;name</span><span style="color: #0000ff; font-size: 8pt; ">="#{request.contextPath}/resources/template1/main.css"</span><span style="color: #0000ff; font-size: 8pt; ">&gt;&lt;/</span><span style="color: #800000; font-size: 8pt; ">h:outputStylesheet</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span></div>&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp;&nbsp;<span style="font-size: 10pt; font-weight: normal;">必须在 web.xml 中，添加对 mime 的配置<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-size: 8pt; ">&lt;</span><span style="color: #800000; font-size: 8pt; ">mime-mapping</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-size: 8pt; ">&lt;</span><span style="color: #800000; font-size: 8pt; ">extension</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span><span style="font-size: 8pt; ">xcss</span><span style="color: #0000ff; font-size: 8pt; ">&lt;/</span><span style="color: #800000; font-size: 8pt; ">extension</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-size: 8pt; ">&lt;</span><span style="color: #800000; font-size: 8pt; ">mime-type</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span><span style="font-size: 8pt; ">text/css</span><span style="color: #0000ff; font-size: 8pt; ">&lt;/</span><span style="color: #800000; font-size: 8pt; ">mime-type</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span><br /><span style="color: #0000ff; font-size: 8pt; ">&lt;/</span><span style="color: #800000; font-size: 8pt; ">mime-mapping</span><span style="color: #0000ff; font-size: 8pt; ">&gt;</span></div><span style="font-size: 10pt; font-weight: normal;"><br /></span>&nbsp; &nbsp; <span style="font-weight: normal; font-size: 10pt; ">然后在WebRoot下面建立一个 resources 文件夹，这个文件就是你的资源的根目录。 比如：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:outputStylesheet&nbsp;</span><span style="color: #FF0000; ">library</span><span style="color: #0000FF; ">="css"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="template1/prime.css"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">h:outputStylesheet</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:outputScript&nbsp;</span><span style="color: #FF0000; ">library</span><span style="color: #0000FF; ">="js"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="template1/main.js"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">h:outputScript</span><span style="color: #0000FF; ">&gt;</span></div>&nbsp; <span style="font-family: Tahoma; ">&nbsp; </span><span style="font-weight: normal; font-size: 10pt; font-family: Tahoma; ">这里的 library 属性指的是你resource下面有个文件夹叫 css 。后面的name 指的是 这个css文件夹下的相对路径。<br /></span><br />&nbsp; &nbsp; <span style="font-weight: normal; font-size: 10pt; font-family: Tahoma; ">这样就可以在页面中引入这些资源了</span><br /><span style="font-weight: normal; font-size: 10pt; "><br /></span><span style="font-size: 10pt; font-weight: normal;"><br /><br /></span><span style="font-weight: normal; font-size: 10pt; "><br /><br /></span><p>&nbsp;</p></h3><img src ="http://www.blogjava.net/FORRogue/aggbug/370093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FORRogue/" target="_blank">Rogue</a> 2012-02-16 13:31 <a href="http://www.blogjava.net/FORRogue/archive/2012/02/16/370093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Seam3 ViewConfig(访问权限)  </title><link>http://www.blogjava.net/FORRogue/archive/2012/02/16/370090.html</link><dc:creator>Rogue</dc:creator><author>Rogue</author><pubDate>Thu, 16 Feb 2012 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/FORRogue/archive/2012/02/16/370090.html</guid><wfw:comment>http://www.blogjava.net/FORRogue/comments/370090.html</wfw:comment><comments>http://www.blogjava.net/FORRogue/archive/2012/02/16/370090.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/FORRogue/comments/commentRss/370090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FORRogue/services/trackbacks/370090.html</trackback:ping><description><![CDATA[<h1><span style="color: #3366ff; font-size: 10pt; ">&nbsp;</span><span> &nbsp;</span><span style="color: #3366ff; font-size: 14pt; ">Seam3 ViewConfig(访问权限) &nbsp;</span></h1>
<div>
<p>&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">1月份终于出了 Seam 3.1.0.final ，这将是Seam项目组的最后一个版本。此后，Seam项目组要发生很大的改动，原先的各个模块会被并入其他项目中维护。希望这个版本会很给力。</span><span><br />
</span><span>&nbsp; &nbsp;&nbsp;</span><span style="color: #3366ff; font-size: 10pt; ">在之前的Seam2中，Seam提供了一个page.xml 来配置相关资源的访问权限。在Seam3 中&nbsp;</span><a rel="nofollow" href="http://seamframework.org/Seam3/SecurityModule"><span style="color: #3366ff; font-size: 10pt; ">Security</span></a><span style="color: #3366ff; font-size: 10pt; ">&nbsp;模块发生了很大的变化，无论是登录还是访问权限的控制与Seam2都有很大的差别。</span></p>
<div></div>
<div>
<div>&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">Seam3 中提供了一种通过在枚举上添加注解来实现类型安全（type-safe）配置访问权限。这种方式Seam3 自己说是很强大的 &gt;.&lt; &nbsp; 从下面的例子看来还是不错的，不知道在实际应用中怎么样了。</span></div>
<div></div>
<div>&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">下面介绍这种通过注解来实现访问权限的配置。使用这种方式需要添加&nbsp;</span><a rel="nofollow" href="http://seamframework.org/Seam3/SecurityModule"><span style="color: #3366ff; font-size: 10pt; ">Seam Security</span></a><span style="color: #3366ff; font-size: 10pt; ">，你可以直接添加jar包，也可以通过maven来添加到工程中。</span></div>
<div></div>
<div>&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">首先，新建一个接口，加上 @ViewConfig &nbsp;注解。再在接口中定义个枚举，通过对枚举里面每个元素添加一些注解，相当于定义了一些访问规则。<br />
</span>
<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000080; font-size: 10pt; ">@</span><span style="color: #000080; font-size: 10pt; ">ViewConfig</span><br /><span style="color: #000000; font-size: 10pt; ">public</span>&nbsp;<span style="color: #800080; font-size: 10pt; ">interface</span><span style="color: #800080; ">&nbsp;</span><span style="color: #000000; font-size: 10pt; ">Pages&nbsp;{</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-size: 10pt; ">static</span>&nbsp;<span style="color: #800080; font-size: 10pt; ">enum</span><span style="color: #800080; ">&nbsp;</span><span style="color: #000000; font-size: 10pt; ">page&nbsp;{</span><br /><br /><span style="color: #3366ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000080; font-size: 10pt; ">@FacesRedirect</span><br /><span style="color: #000080; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ViewPattern(</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #3366ff; font-size: 10pt; ">/pages/*</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #000080; font-size: 10pt; ">)</span><br /><span style="color: #000080; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@LoggedIn</span><br /><span style="color: #3366ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; font-size: 10pt; ">User,</span><br /><br /><span style="color: #3366ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000080; font-size: 10pt; ">@FacesRedirect</span><br /><span style="color: #000080; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ViewPattern(</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #3366ff; font-size: 10pt; ">/*</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #000080; font-size: 10pt; ">)</span><br /><span style="color: #000080; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@LoginView(</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #3366ff; font-size: 10pt; ">/Login1.xhtml</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #000080; font-size: 10pt; ">)</span><br /><span style="color: #000080; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@AccessDeniedView(</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #3366ff; font-size: 10pt; ">/denied.xhtml</span><span style="color: #000080; font-size: 10pt; ">"</span><span style="color: #000080; font-size: 10pt; ">)</span><br /><span style="color: #3366ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; font-size: 10pt; ">ALL;</span><br /><span style="color: #000000; font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span><br /><span style="color: #000000; font-size: 10pt; ">}</span></div></div>
&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">下面对各个注解进行解释：<br />
</span>&nbsp;<span> &nbsp;&nbsp;</span><span style="color: #3366ff; font-size: 10pt; ">@ViewConfig</span>
<div>
<div><span style="color: #3366ff; font-size: 10pt; "> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个注解告诉Seam框架这个接口里面枚举是对访问权限进设置。</span></div>
<div><span style="color: #3366ff; font-size: 10pt; "> &nbsp;&nbsp;&nbsp;&nbsp;@ViewPattern</span></div>
<div><span style="color: #3366ff; font-size: 10pt; "> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个注解的参数是对拦截的目标进行配置，可以使用通配符。</span></div>
<div><span style="color: #3366ff; font-size: 10pt; "> &nbsp;&nbsp;&nbsp;&nbsp;@LoginView, @AccessDeniedView</span></div>
<div>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">这两个注解的参数分别是登录和登录失败的跳转页面。</span></div>
</div>
&nbsp; &nbsp;<span style="color: #3366ff; font-size: 10pt; ">@Admin<br /></span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="line-height: 23px; text-align: left; background-color: #ffffff; font-family: Georgia; color: #3366ff; font-size: 10pt; ">这其实是自定义注解，通过Seam&nbsp;</span><span style="line-height: 25px; color: #3366ff; font-size: 10pt; ">@SecureBindingType 来实现，通过@Secures 注解来实现一种授权的声明。有这个权限的用户不会对 @ViewPattern进行拦截。<br /></span>&nbsp; &nbsp;&nbsp;<span style="font-family: Georgia; background-color: #ffffff; line-height: 25px; text-align: left; color: #3366ff; font-size: 10pt; ">@RestrictAtPhase</span><div><div style="line-height: 25px; color: #3366cc; font-family: Arial, Helvetica, simsun, u5b8bu4f53; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="font-family: Georgia; color: #3366ff; font-size: 10pt; ">这个注解指定对哪个生命周期进行作用。默认是响应渲染(</span><span style="color: #3366ff; font-size: 10pt; ">Render Response)阶段。</span><br /><span style="color: #3366ff; font-size: 10pt; ">&nbsp; &nbsp; &nbsp;@LoggedIn</span><br /><span style="color: #3366ff; font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 拦截验证用户是否登录</span><br />&nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp;<span style="font-size: 10pt; ">一般，我们会写一个 All 的枚举元素，在它的注解上定义 &nbsp; @LoginView &nbsp;@AccessDeniedView &nbsp; 。</span><br /><br />&nbsp; &nbsp; <strong>2. 使用@SecurdBindingType 来创建安全拦截的注解</strong>&nbsp;&nbsp;</div></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><div>@SecurityBindingType&nbsp;</div>@Retention(RetentionPolicy.RUNTIME)<br />@Target({ElementType.FIELD,&nbsp;ElementType.METHOD,&nbsp;ElementType.TYPE})<br /><span style="color: #0000FF; ">public</span>&nbsp;@<span style="color: #0000FF; ">interface</span>&nbsp;User&nbsp;{<br />}</div><span>
<br /></span>&nbsp;<strong> &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">3.&nbsp;</span><span style="background-color: #ffffff; color: #3366cc; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: small; line-height: 20px; text-align: left; ">这个注解具体权限授权是通过提供@Secures的一个方法来实现，它的返回类型是boolean：</span></strong><span style="color: #3366ff; font-size: 10pt; "><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;SecurityRules&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;@Secures&nbsp;@User&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;userChecker(Identity&nbsp;identity)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(identity.getUser()&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div>&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">这个方法只是简单的实现了判断用户是否登录。也可以通过 identity 拿到登录用户的 id 然后查出这个用户是否具有某一种权限，来控制他是否能访问。<br /></span>&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; font-size: 10pt; ">完整的一个执行过程是这样的，当一个请求访问 pages/* 下面的页面时，在渲染响应的时候（Render Response）生命周期阶段。默认是这个阶段，可以通过</span><span style="background-color: #ffffff; font-family: Georgia; line-height: 25px; text-align: left; color: #3366ff; font-size: 10pt; ">@RestrictAtPhase 来指定。这时候Seam 的安全机制就会拦截这个请求，执行 &nbsp;具有 @Secures @User 的验证方法 userChecker ，如果返回 fasle ，请求就被拒绝，重定向到 @LoginView 定义的登录页面。反之，就可以访问资源。 我不知道能不能 返回 false 的时候可以跳转到指定的页面，这个还没有尝试。<br /></span>&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp;&nbsp;<span style="color: #3366ff; ">我在第一次尝试使用 ViewConfig 的时候，犯了一个错误。@LoginView 定义的登录页面的名字我写错了，这个页面并不存在，这样的结果就是无论你的验证方法是返回 true 还是 false &nbsp;请求都会被通过。这样好像有点不太合理，纠结我好久，还以为Seam 3.1.0.Final 中这个Bug还存在。 &gt;.&lt;</span><span style="color: #3366ff; font-size: 10pt; "><br /></span><span><br /><br />
</span></div>
</div>
</div><img src ="http://www.blogjava.net/FORRogue/aggbug/370090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FORRogue/" target="_blank">Rogue</a> 2012-02-16 13:06 <a href="http://www.blogjava.net/FORRogue/archive/2012/02/16/370090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>