return
обычно возвращается из метода без выполнения каких-либо дополнительных инструкций, поэтому часть else
не нужна. Таким образом, вы избавитесь от проблемы № 1.
Что касается перенаправления, почему бы не вернуть какую-то команду redirect :
[HttpPost]
public ActionResult Index(LoginModel loginData)
{
if (login fails)
{
return Json(new {result = "InvalidLogin"}, JsonRequestBehavior.AllowGet);
}
return Json(new {result = "Redirect", url = Url.Action("MyAction", "MyController")});
}
И затем в javascript:
$.post(url, data, function (response) {
if (response.result == 'InvalidLogin') {
//show invalid login
}
else if (response.result == 'Error') {
//show error
}
else if (response.result == 'Redirect'){
//redirecting to main page from here for the time being.
window.location = response.url;
}
});
startsWith(baseDirectory.getCanonincalPath()+"/")
должно быть в порядке.
Лучше использовать новые файлы и amp; Пути классов.
Path path = file.toPath();
path = path.toRealPath();
// Absolute, ".." removed, sym links resolved as no param NOFOLLOW_LINKS.
path = path.normalize(); // Removes ".."
path.startsWith(baseDir); // Base path
Вы можете использовать метод, который проверяет, начинается ли путь кандидата с обязательным родительским путем. Кажется, что Java 7 nio имеет хорошую поддержку для этого.
Вот метод, реализующий эту идею:
/**
* Check if a candidate path starts with a mandatory parent path
* @param mandatoryParentPath Mandatory parent path
* @param candidate Candidate path which should be under the mandatory parent path
* @return {@code true} if a candidate path starts with a mandatory parent path, else {@code false}
*/
/**
* Check if a candidate path starts with a mandatory parent path
* @param mandatoryParentPath Mandatory parent path
* @param candidate Candidate path which should be under the mandatory parent path
* @return {@code true} if a candidate path starts with a mandatory parent path, else {@code false}
*/
public static boolean absoluteStartsWith(Path mandatoryParentPath, Path candidate) throws IOException {
Objects.requireNonNull(mandatoryParentPath, "Mandatory parent path should not be null");
Objects.requireNonNull(candidate, "Candidate path should not be null");
Path path = candidate.toRealPath();
System.out.println(" " + candidate); // debugging code
return path.startsWith(mandatoryParentPath.toAbsolutePath());
}
Вот простой тест для проверки метода выше:
public static void main (String[] args) throws java.lang.Exception
{
Path root = Paths.get("d:/work");
System.out.println(absoluteStartsWith(root, root.resolve("/tmp")));
System.out.println(absoluteStartsWith(root, root.resolve("..")));
System.out.println(absoluteStartsWith(root, root.resolve("ems")));
}
Это печатает на моей машине:
d:\tmp
false
d:\work\..
false
d:\work\ems
true
Примечание: если один из путей-кандидатов не существует, тогда исключение IOException будет выведено вышеуказанным методом absoluteStartsWith
.