自动登录SEAM + JSF

时间:2009-08-03 18:18:16

标签: xml jsf jboss seam

我的网络应用程序需要在用户访问应用程序URL时自动登录:

示例:

http://myapp/home.xhtml?token={3bcdc006-05fc-4ce1-953a-17375edcf2a2}

on my pages.xml i have the following:
<pages xmlns="http://jboss.com/products/seam/pages"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd"

       no-conversation-view-id="/home.xhtml"
       login-view-id="/login.xhtml">

当没有对话激活时,默认为home.xhtml 当用户使用令牌参数到达home.xhtml时,我希望调用一个操作并登录用户。

任何教程或示例?

如果没有调用参数,我希望引发一个org.jboss.seam.security.AuthorizationException,以便用户被重定向到error.xhtml

提前致谢

2 个答案:

答案 0 :(得分:3)

Seam Documentation中阅读页面参数。

在您的pages.xml中,您可以指定类似的内容:

<pages>
      <page view-id="/home.xhtml" action="#{backingBean.checkToken}">
          <param name="token" value="#{backingBean.token}"/>
      </page>
</pages>

这将使用URL中的值填充变量token并调用checkToken()方法。在checkToken()方法中,您可以检查用户是否已登录,如果没有,则检查是否已填充token,如果没有,则抛出AuthorizationException

答案 1 :(得分:0)

这类似于问题

get-request-and-session-parameters-and-attributes-from-jsf-pages

一些谷歌搜索显示您可以使用faces上下文和内置地图访问请求参数,param,它有您的请求参数。所以,我建议你有一个在home.xhtml上加载的请求bean,它检查facesContext并引发一个org.jboss.seam.security.AuthorizationException以让JBOSS处理登录。

FacesContext ctx = FacesContext.getCurrentInstance();
String requestToken = ctx.getApplication().createValueBinding("#{param.token}").getValue(ctx);