当前位置: 首页 > 面试题库 >

使用Naming Convention插件拒绝直接访问Struts2中的JSP文件

孙海
2023-03-14
问题内容

我一直在这个问题上苦苦挣扎,因为我是Struts2开发的新手,最近才开始使用此命名Convention Plugin。

我正在尝试创建一个简单的webapp,起初仅包含两个页面:

  1. 登录页面(login.jsp)
  2. 主页(home.jsp)

首先,向用户显示一个登录页面,如果提供了正确的用户名和密码,他们将登录并重定向到主页。

我已经成功地创建了小型Web应用程序,写下了自定义登录拦截器,一切正常,并且按预期工作。如果用户尝试直接调用,则可以将用户重定向到登录页面HomeActionhome.jsp如果您之前登录过,则会导致登录)http://myserver/homeAction

当我尝试像这样直接访问JSP时,问题就来了:

http://myserver/home

当我使用this时conventionplugin,struts会获取我的home.jsp插件并显示它。这不是我所期望的行为,home.jsp应仅将其显示为loginAction成功的结果。

我试图解决这个问题的事情

好吧,据我搜索,将我的JSP放在/WEB-INF/目录中应该可以防止它们被访问,但是不能,因为我所有的JSP都在/WEB-INF/content/

我尝试过的另一件事是阻止访问任何JSP资源(阻止*.JSP请求)。只要您尝试访问即可完成操作myserver/home.jsp,但是访问时(按预期)失败myserver/home

编辑: 关于此问题,stackoverflow中还有另一个问题,但我无法理解答案: WEB-INF下的Struts 2 ConventionPlugin和JSP文件

信息更新:
我发现Struts2约定插件使用了一种称为“无结果的结果”的东西,因此您可以通过调用不带扩展名的来访问目录JSPs内的内容,并将其作为虚拟操作处理,并在成功时返回该操作。这是一个示例,用以说明我要解释的内容:WEB- INF/content``JSP``JSP

如果我home.jspWEB-INF/content目录中并进行调用http://myserver/home,Struts2将“触发”一个动作,其结果将是home.jsp。然后,该问题的解决方案将禁用此“无操作”结果。

如果没有人提供答案,我将不断更新问题,朝着解决方案迈进。


问题答案:

在这里您要如何禁用此功能。创建一个虚拟bean

package com.struts.handler;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.UnknownHandler;
import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.entities.ActionConfig;

/**
 * Created by Roman C on 22.03.2015.
 */
public class MyUnknownHandler implements UnknownHandler {
  @Override
  public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException {
    return null;
  }

  @Override
  public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException {
    return null;
  }

  @Override
  public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException {
    return null;
  }
}

然后在中配置它struts.xml

  <bean type="com.opensymphony.xwork2.UnknownHandler" name="handler" class="com.struts.handler.MyUnknownHandler"/>
  <unknown-handler-stack>
    <unknown-handler-ref name="handler"/>
  </unknown-handler-stack>

在这里解释:

上面提到的约定插件及其创建的配置还放置了一个未知的处理程序,该处理程序应处理不存在配置的URL(即不是由约定创建的)。这是问题的根源。

现在放置您自己的处理程序将禁用约定的。因此它将不再按惯例处理结果。



 类似资料:
  • 问题内容: 这是场景: 根文件夹中有一个文件 一些文件包含在其中是在文件夹中。 根文件夹中还有1个其他文件()用于表单提交操作。 我想通过htaccess 限制直接用户访问文件夹中的文件。也为。但是include将适用于文件。就像,如果用户键入,它将对其进行限制(可以重定向到错误页面)。 问题答案: 我只是将文件夹移出了Web根目录,但是如果您想阻止直接访问整个文件夹,则可以在该文件夹中放置一个文

  • 问题内容: 有些脚本只能通过ajax使用,并且我不希望用户直接从浏览器运行这些脚本。我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中。 因此,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求。(我知道可以伪造http标头,但我想不出更好的解决方案)。我尝试了这个: ReWrite

  • 问题内容: 我在FoxPro 6.0命令窗口中使用SQL命令,并遇到“文件访问被拒绝”。 我的SQL命令是: 情况: Windows 7专业版 FoxPro 6.0 main.dbf被共享给许多用户。 main.dbf不是 隐藏的 ,也不是 只写 任何意见将不胜感激! 问题答案: 此DBF文件位于共享驱动器上吗?如果是这样,则另一个用户可能使文件打开了“排他”,或者您正试图打开文件“排他”。默认状

  • 问题内容: 我在GAE中使用支撑架。我正在使用GAE 1.8和struts 2.3.15 jar文件。 在我的应用程序中,我面临这个异常 我做了很多搜索,有人说从sturts.xml文件中删除此属性值 有人说将值从true更改为false。我做到了,但是没用。请给出一个解决方案。我也更改了jar文件并使用2.1.8版本,但是在此过程中我在服务器启动时遇到了异常 我也在struts jar文件中使用

  • 尝试使用以下查询检索MS团队的文件:https://graph.microsoft.com/v1.0/groups/{id}/drive…但我收到“拒绝访问” 我已确保授予以下权限(以及一些权限):文件。读取,文件。读写,文件。阅读全部,文件。读写。所有,站点。阅读所有,站点。读写。全部的 我只是想列出这些文件。我是否使用了错误的API调用?我还需要授予哪些其他权限?TIA。

  • 问题内容: 我得到以下IOException: 尝试运行以下代码时: 在我看来,由于某种原因,JVM无法创建新文件。如果文件已经存在,则代码可以很好地运行。是否存在某种访问文件来指示JVM是否可以创建新文件还是我只是在做错什么? 任何帮助深表感谢 :-) 我正在运行Java 1.4,并且已经在Windows XP中的JDeveloper中进行了测试。 问题答案: 问题在于这些调用彼此接替: 创建操