我有一个使用Spring MVC的Web应用程序。控制器是否可能根据条件返回临时视图?例如
@RequestMapping(value="/")
public String home(){
// some code here
return "home/{RANDOM_HASH}"
}
并将用户重定向到此链接。有一些动作,当它完成时,他将被重定向到其他地方,即使他写完整路径,包括随机哈希,他也无法连接到它。 英语不是我的第一语言,所以请原谅任何错误。
答案 0 :(得分:0)
是的,您可以使用@PathVariable
将HTTP参数绑定到方法参数:
@RequestMapping(value="home/{hash}")
public String link(@PathVariable String hash) {
// 1) verify hash was not made up
// 2) do whatever needs done with hash
return "somewhereElse";
}
至于如何验证哈希是否真的是由你的应用程序创建的而不是在URL栏中输入的:你可以创建某种“令牌管理器”。它将管理所有哈希:发布新令牌并在使用旧令牌后使其无效。简化的实现可能是这样的:
@NotThreadSafe
class TokenService {
private final Set<String> hashes = new HashSet<String>();
public String getHash() {
String hash = "???"; // TODO: random generator
hashes.put(hash);
return hash;
}
public void invalidateHash(String hash) {
hashes.remove(hash);
}
public boolean checkHash(String hash) {
return hashes.contains(hash);
}
}
请注意,实际实施应该可以访问hashes
线程安全。