Spring MVC,如何生成临时链接

时间:2013-12-01 23:29:23

标签: spring spring-mvc

我有一个使用Spring MVC的Web应用程序。控制器是否可能根据条件返回临时视图?例如

@RequestMapping(value="/")
public String home(){
    // some code here
       return "home/{RANDOM_HASH}" 
}

并将用户重定向到此链接。有一些动作,当它完成时,他将被重定向到其他地方,即使他写完整路径,包括随机哈希,他也无法连接到它。 英语不是我的第一语言,所以请原谅任何错误。

1 个答案:

答案 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线程安全。