struts中无权访问某个页面时如何重定向到homepage.do?

问题描述 投票:0回答:1

我的应用程序使用 Struts 1,并且页面使用

struts-config.xml
中操作路径的属性“roles”进行角色保护(即:如果用户的角色不允许,则用户无法访问页面):

<action path="/ProtectedPageAction" type="org.apache.struts.actions.ForwardAction"
    parameter="ProtectedPage" roles="admin" />

这样,如果用户未登录或没有“管理员”角色,他将看到主页而不是受保护的页面。

现在,所有这些工作都完美,唯一的问题是浏览器中的 URL(因此 servlet_path 的值)不是

homepage.do
而是
ProtectedPageAction.do
,或者换句话说,servlet_path 与显示的页面。

我需要使用 servlet_path 的值,因此当用户无权查看页面时,浏览器中显示的 URL 必须是

homepage.do
而不是
ProtectedPageAction.do
;这也是出于安全原因:如果用户注意到 URL 中的
ProtectedPageAction.do
可能会开始想知道它的用途以及如何访问它等。

java struts roles acl struts-1
1个回答
1
投票

重定向通常通过设置操作转发属性redirect =“true”来完成。在你的情况下,你需要创建行动

public class RedirectAction extends ForwardAction {
  @Override
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {

    // Create a RequestDispatcher the corresponding resource
    String path = mapping.getParameter();

    if (path == null) {
        throw new ServletException(messages.getMessage("forward.path"));
    }

    // Let the controller handle the request
    ActionForward retVal = new ActionForward(path, true);
    retVal.setContextRelative(true);

    return retVal;
  }
}

或者自然使用配置

<action path="/ProtectedPageAction" type="org.yourname.struts.actions.ProtectedPageAction"
    parameter="ProtectedPage" roles="admin">
  <forward name="success" path="/Homepage.do" redirect="true"/>
</action>

public class ProtectedPageAction extends Action {
  @Override
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {

    // Let the controller handle the request
    ActionForward retVal = mapping.findForward("success");
    retVal.setContextRelative(true);

    return retVal;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.