Struts2 - 如何在不使用struts.xml的情况下重定向到操作?

时间:2014-03-19 15:30:54

标签: java redirect struts2 java-ee-6 http-redirect

如果用户未登录,我的网络服务器会阻止访问系统,但某些用户可能有多个配置文件,系统只允许用户登录选择其中一个,即用户可能是普通用户具有一些权限,同一个用户可以使用管理员权限注销并再次登录,并可以访问所有内容。

发生这种情况时,我将用户重定向到强制用户选择他/她的个人资料的操作,但服务器不再知道用户尝试访问的操作。我可以通过ActionInvocation检索此信息,如下所示:

public String initFeature() {
    final ActionInvocation invocation = ServletActionContext.getActionContext(BaseAction.getRequest())
            .getActionInvocation();
    final Object action = invocation.getAction();
    if (!this.isUserFullyLogged() && !(action instanceof ProfileSelectionAction)) {
        final Boolean isPendingProfileSelection = (Boolean) this
                .retrieveSessionAttribute(Constants.PENDING_PROFILE_SELECTION);
        if (isPendingProfileSelection != null && isPendingProfileSelection.booleanValue()) {
            this.saveSessionAttribute("action", action);
            this.saveSessionAttribute("namespace", invocation.getProxy().getNamespace());
            return Constants.PROFILE_SELECTION;
        }

        return Action.LOGIN;
    }
    return Action.SUCCESS;
}

当系统到达配置文件选择操作时,我有用户试图访问的操作和命名空间,并且禁止但我不知道我必须做什么才能将系统重定向到此命名空间和操作因为到目前为止我只使用struts.xml文件的动作结果来完成它。

1 个答案:

答案 0 :(得分:1)

您可以在result文件中的struts.xml配置中使用参数。在您的操作类中创建两个属性,这两个属性将包含操作和命名空间的名称,并在struts.xml中使用它们:

<action name="..." class="...">
  <result type="redirectAction">
    <param name="actionName">${action}</param>
    <param name="namespace">${namespace}</param>
  </result>
</action>

此外,如果您不想创建它们并且已经将变量存储在会话中,则可以使用#session表达式从会话中检索它们。

<action name="..." class="...">
  <result type="redirectAction">
    <param name="actionName">${#session.action}</param>
    <param name="namespace">${#session.namespace}</param>
  </result>
</action>