【发布时间】:2015-04-10 07:14:27
【问题描述】:
我的操作类通常会有一个 action 字段变量,该变量在 execute() 方法中分配了一个值:
public class MyAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String action;
@Override
public String execute() throws Exception {
action = "true";
// code here
return SUCCESS;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
在 JSP 中,我检查 action 变量(现在作为请求传递)是否为 null。如果是null,会重定向到action类,否则会继续渲染页面:
<head>
<c:if test="${action == null}">
<c:redirect url="myaction" />
</c:if>
</head>
我这样做是为了确保用户在尝试非法跳转到 JSP 时首先通过该操作。
它按预期工作,但还有其他优雅的方法吗?
【问题讨论】:
-
你做错了。只需将您的 jsp-s 放在 WEB-INF 下即可。
-
只能通过操作访问页面。重定向不是问题。
-
@ohtph 一般来说,客户端不应该直接请求 JSP 页面。
WEB-INF下的 JSP 页面可供 服务器 访问,例如,当它们由操作呈现时。当容器已经为您执行此操作并且您所要做的就是遵循标准的最佳实践时,编写代码以防止直接访问 JSP 是一个非常奇怪的想法。 -
@AleksandrM 和 Dave:由于actionless results,在使用 Convention 插件时,仅将 JSP 置于 WEB-INF 下是行不通的。相关:stackoverflow.com/q/29185042/1654265
-
@ohtph 如果他们在 WEB-INF 下,他们可以猜到他们想要的一切——他们无法访问它们。 “正确的行动”在很大程度上取决于你实际在做什么,而 IMO,如果他们已经在猜测,试图“帮助”他们基本上只是在引导最终被误导的人。