Java 如何防止对操作类的直接URL访问

Java 如何防止对操作类的直接URL访问,java,jsp,struts2,Java,Jsp,Struts2,我正在开发一个购物网站应用程序。在我的应用程序中,我需要阻止对动作类的直接URL访问。例如,我有一个名为OrderAdd的操作。在这个action类中,我从请求范围中获取一些数据。如果有人直接访问此action类,则会显示Nullpointer异常。如何在我的应用程序中防止这种情况。有什么可能的方法来解决这个问题吗。我正在使用jsp进行视图。我的框架是struts2。动作是java 提前谢谢 j2ee中内置了安全约束。您可以在web.xml中配置不允许直接访问的URL模式 读这里 用例:我们

我正在开发一个购物网站应用程序。在我的应用程序中,我需要阻止对动作类的直接URL访问。例如,我有一个名为OrderAdd的操作。在这个action类中,我从请求范围中获取一些数据。如果有人直接访问此action类,则会显示Nullpointer异常。如何在我的应用程序中防止这种情况。有什么可能的方法来解决这个问题吗。我正在使用jsp进行视图。我的框架是struts2。动作是java


提前谢谢

j2ee中内置了安全约束。您可以在web.xml中配置不允许直接访问的URL模式

读这里

用例:我们希望从任何访问中排除一组web资源。当web应用程序的某个部分需要进行某种形式的维护或不适用于通用web应用程序的特定物理部署时,可能会出现这种情况。我们将通过不指定角色的授权约束来实现这一点

<security-constraint>
   <display-name>excluded</display-name>
   <web-resource-collection>
      <web-resource-name>No Access</web-resource-name>
      <url-pattern>/excluded/*</url-pattern>
      <url-pattern>/restricted/employee/excluded/*</url-pattern>
      <url-pattern>/restricted/partners/excluded/*</url-pattern>
   </web-resource-collection>
   <web-resource-collection>
      <web-resource-name>No Access</web-resource-name>
      <url-pattern>/restricted/*</url-pattern>
      <http-method>DELETE</http-method>
      <http-method>PUT</http-method>
      <http-method>HEAD</http-method>
      <http-method>OPTIONS</http-method>
      <http-method>TRACE</http-method>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
   </web-resource-collection>
   <auth-constraint />
   <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
   </user-data-constraint>
</security-constraint>

排除
禁止进入
/排除/*
/限制/员工/排除/*
/限制/合伙人/排除/*
禁止进入
/受限的/*
删除
放
头
选择权
痕迹
得到
邮递
没有一个

我认为这个问题是基于误解。web应用程序的本质是用户可以使用任何请求方法访问任何URL。您需要允许用户对有效的URL发出有效的请求,因为在正常、正确的应用程序工作流中需要这样做。如果您不想让用户在访问URL时看到您的
NullPointerException
s而不提供所需的参数,您应该使用
try..catch
来捕获它们,或者更好,通过使用
if
或其他方法测试缺少的参数,首先避免导致
NullPointerException
s。谢谢。这可能有用。@user3081492我已经更新了链接和答案。。这可能更有用。另一个好方法是添加一个过滤器并阻止(发送500页或空白页)一些请求),但过滤器应该很快,并且有一个拒绝URL的缓存列表patterns@tgkprog对我们可以编写过滤器。但我个人认为这是一种更简洁的方法。不过,我不确定这两种方法的时间复杂性。除了过滤器,Struts2还提供了截取器,截取器的作用方式与过滤器类似,但与Struts配置的其余部分集成在一起。它们允许您在Struts内部处理任何重定向等,而不是像处理过滤器一样在Struts外部处理。如果您不能阻止自己处理NPE,异常侦听器可以为您处理。这是一个示例。实际上,您需要做的是防止异常的显示甚至抛出(或者可能只是显示它们的堆栈跟踪)。您不需要“阻止对操作类的直接URL访问”,这没有任何意义。