2010-07-01 39 views
2

我在Weblogic 10.3.2(11g)上使用Seam 2.2.1.CR1。我想要使​​用外部SSO(Oracle提供的专用Oracle基于OID)。我想集成这个外部登录(登录屏幕属于SSO)。请注意,我不想使用LdapStore。如果我得到这个权利,这将需要我有一个登录页面通过我的应用程序,然后以某种方式连接到LDAP和登录。我想使用SSO提供的外部登录屏幕。使用外部认证的煤层安全

一些思考

我没有看到使用这种SSO登录到比使用的WebLogic的任何身份验证任何不同的程序。通过SSO和BASIC身份验证在默认身份验证器上,应用程序的结果是相同的:用户输入应用程序,并在每个HttpServletRequest上getRemoteUser()方法返回用户登录的用户名(在SSO或BASIS登录),并且.isUserInRole('blah')根据通过身份验证分配的角色返回true/false。所以,我认为两种认证是完全一样的,在编程方面是明智的。

问题

我的问题涉及如何能与煤层安全集成。 Seam in Action解释了自定义登录屏幕如何包含在应用程序中,该应用程序填充了身份组件和凭据组件。然后Seam使用这些组件来应用高级安全限制,如s:hasRole。

但是,在我的应用程序中,我不要想要一个登录屏幕。我所需要的是能够以某种方式使用Seam安全与我已有的:HttpServletRequest中的角色和用户名。

我已经找到了这个主题(见最后),但我不确定我是否理解。例如,一个问题是如果扩展身份是我所需要的。

另一个问题是,Seam在行动Dan Allen说,拥有登录页面是强制性的,我不想拥有。从449页:

只有接缝不会知道从哪里 直接在请求 这个页面,因为你 没有指定登录页面的非验证用户。如果尚未设置 登录页面,Seam 将引发NotLoggedInException。

通常,我认为将外部SSO(或任何应用服务器身份验证器)与Seam集成仍然很少记录,虽然这是一个非常常见的业务需求。我想我们都会一直待到Seam 3完成。

同时,任何一般/特定的方向?

干杯!

- http://seamframework.org/Community/HelpWithIdentityloginAndAcceptExternallyAuthenticatedPrincipal

回答

1

它的工作原理与Seam 2.x的

在pages.xml中创建一个虚假的登录视图页面。然后,使用它或类似的外部登录。

然后,添加导航规则以重定向到该导航视图中成功/失败的登录页面。

而且您将需要重写身份验证方法。

事情是这样的:

<page view-id="/fakeLogin.xhtml"> 
     <action execute="#{identity.login}" if="#{not identity.loggedIn}" /> 
     <param name="username" /> 
     <navigation from-action="#{identity.login}"> 
       <rule if="#{identity.loggedIn}"> 
         <redirect view-id="/home.xhtml"/> 
       </rule> 
       <rule if="#{not identity.loggedIn}"> 
         <redirect view-id="/error.xhtml"/> 
       </rule> 
     </navigation> 
</page> 

和:

@In(required = true) 
private String username; 

@In 
Identity identity; 

public boolean authenticate() { 
    //... 
    throw new AuthorizationException("login failed"); 
    //... 
    return true; 
}