gpt4 book ai didi

security - 阻止在Struts2中直接访问*.jsp和*.action

转载 作者:行者123 更新时间:2023-12-02 22:32:40 25 4
gpt4 key购买 nike

我在 Tomcat 中使用 Struts2+Spring+Hibernate。

我遇到了用户能够直接输入 .jsp 或 .action url 的问题。他们需要访问的所有内容都可以从主页访问,所以我想阻止这种访问。

我一直在寻找答案,并且找到了一些东西,尤其是与 .jsp 阻塞有关的东西。我已经添加了

<security-constraint>
<web-resource-collection>
<web-resource-name>Deny Direct Access</web-resource-name>
<description></description>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Denied</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>Denied</role-name>
</security-role>

到我的 web.xml,但这似乎没有任何作用。然后我变了

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>

它会阻止某些 .jsp 文件但不会阻止其他文件。我已经确保不放

<url-pattern>*.jsp</url-pattern>

担任我的任何安全角色。

我听说我可以将我所有的 jsps 放在/Web-inf 中,但这似乎是一个很大的麻烦,因为我必须在我引用它们的应用程序的每个实例中更改路径。

我也找不到任何涉及阻止直接访问 .action 类的内容。如果有人可以指出我可以找到此信息,将不胜感激。谢谢。

最佳答案

如果将 JSP 放在/WEB-INF 目录下,则无法直接访问它们。

至于 .actions,你在那里运气不好——你无法阻止某人直接访问网页的 URL(这就是 .action 的最终含义)。

为什么要阻止人们直接访问 URL?能够直接链接到事物是网络的一个非常基本的部分。

更新

由于您正在寻找一种控制访问的方法,因此您可以创建一个接口(interface),然后创建一个拦截器。在拦截器中,检查当前操作是否实现了接口(interface),如果是,则调用接口(interface)上的方法。

这是一个例子:

public interface SecurableAction {
void checkSecurity();
}

public class SecurityInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Object action = invocation.getAction();
if (action instanceof SecurableAction) {
((SecurableAction) action).checkSecurity();
}

return invocation.invoke();
}
}

最后,在您的操作的 checkSecurity() 方法中,检查当前用户是否有权调用该操作。如果用户没有访问权限,则抛出某种异常(我通常创建一个名为 AccessViolation 的异常,然后将其映射到自定义错误页面)。

public class YourAction implements SecurableAction {
@Override
public void checkSecurity() {
if (!currentUser.hasPermission("MANAGE_OTHER_USERS")) {
throw new AccessViolation();
}
}
}

请记住将这个新拦截器添加到您的堆栈中。

作为所有这些的替代方法,您也可以使用 Preparable 接口(interface)来提供所有这些,但我发现使用单独的方法来封装安全检查会更好。

关于security - 阻止在Struts2中直接访问*.jsp和*.action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com