以某个用户的代理登录

时间:2010-04-18 16:39:02

标签: security authentication java-ee seam

我们有一项要求,其中管理用户需要在管理员(角色:管理员)管理多个用户(角色:用户)的环境中作为特定用户进行代理。

例如,如果我们在数据库中有以下用户(admin,user1,user2,user3),我们希望管理员代理为“user2”并在某些情况下使用该系统。我们的Web应用程序中的身份验证基于用户名/密码凭据,当管理员没有“user2”的密码时,可以使用哪些机制代理为“user2”。为了审计目的,应用程序如何跟踪此类访问,以提及“admin”代理了“user2”并执行了某些操作。

我正在寻找有关在我们的j2ee(jboss seam)网络应用程序中支持此功能的建议。

3 个答案:

答案 0 :(得分:2)

您可以实现自定义身份验证方法,该方法首先检查user_name / user_pw 如果失败,请检查user_name / admin_pw,以便使用admins密码允许以任何用户身份登录。

15.3.2. Writing an authentication method

答案 1 :(得分:1)

您可以创建自定义registerAdminAsUser()方法。

@Name("authenticationProxy")
public class AuthenticationProxy {

    private @In org.jboss.seam.security.Identity identity;

    /**
      * Starting with Seam 2.1+, you should use Credentials instead of Identity
      * To collect your username and password
      *
      * Your JSF Form should looks like
      *
      * <h:inputText value="#{credentials.username}"/>
      * <h:inputSecret value="#{credentials.password}"/>
      */
    private @In org.jboss.seam.security.Credentials credentials;

    public String registerAdminAsUser2() {

        identity.getCredentials().setUsername("user2");

        /**
          * Here you should provide any role which should be assigned to User2
          */
        identity.addRole("<A_ROLE>");
        identity.addRole("<OTHER_ROLE>");
        identity.addRole("<ANOTHER_ROLE>");

        /**
          * Do not call login method because it will call authenticate one
          * You do not have User2 password
          */
        // identity.login();

        return "loggedIn";
    }

    /**
      * Be aware you may need a unregisterAdminAsUser2
      */

}

要启用代理,请创建一个commandButton

<h:commandButton value="register Admin as User2" value="#{authenticationProxy.registerAdminAsUser2}" rendered="#{credentials.username == 'admin'}"/>

要使用某些JSF组件,请执行以下操作

<h:commandLink rendered="#{s:hasRole('<ANY_ROLE_ASSIGNED_TO_USER2_GOES_HERE>')}"/>

我希望它对你有用!

答案 2 :(得分:0)

我这样做的方式通常涉及保持两个身份,我称之为逻辑和物理。逻辑身份用于授权检查,物理身份是实际身份(坐在键盘后面的用户)。在正常情况下,逻辑身份=物理身份,但是为了允许用户(通常是管理员)“充当”另一个用户,您可以将逻辑身份更改为目标用户的身份。这样,应用程序就会根据逻辑用户的行为进行操作,但您始终会跟踪物理用户实际坐在计算机后面的人员。 希望有所帮助。