Spring生成下载链接

Spring生成下载链接,spring,spring-security-oauth2,spring-web,Spring,Spring Security Oauth2,Spring Web,有没有办法使用SpringWeb、security oauth堆栈生成下载文件的临时链接 例如,仅对当前会话有效的domain.com/document/ed3dk4kfjw34k43kd4k3cc?您可以尝试将映射添加到会话中。之后,您可以将生成的唯一字符串和文件名存储到此映射中。每次,当您需要按唯一生成的字符串加载文件时,您都会按字符串找到真正的文件名并将其发送给客户端。演示想法的简单组件: @Component @Scope(value = "session") public class

有没有办法使用SpringWeb、security oauth堆栈生成下载文件的临时链接


例如,仅对当前会话有效的
domain.com/document/ed3dk4kfjw34k43kd4k3cc

您可以尝试将
映射添加到会话中。之后,您可以将生成的唯一字符串和文件名存储到此映射中。每次,当您需要按唯一生成的字符串加载文件时,您都会按字符串找到真正的文件名并将其发送给客户端。演示想法的简单组件:

@Component
@Scope(value = "session")
public class SessionFileMap {

    private Map<String, String> fileMap = new HashMap<>();

    public String getUniqueString(String fileName){
        for(String uniqueName: fileMap.keySet()){ 
            //check, if file already in map, return it
            if(fileMap.get(uniqueName).equals(fileName)) return uniqueName;
        }            
        //otherwise, create new
        String uniqueName = generateUniqueName();
        fileMap.put(uniqueName, fileName);
        return uniqueName;
    }

    public String getFileName(String uniqueString){
        if(fileMap.containsKey(uniqueString)){
            return fileMap.get(uniqueString);
        }
        return null;
    }

    private String generateUniqueName() {
        String uniqueString = //generation of unique string
        return uniqueString;
    }
}
控制器必须具有
会话的作用域和组件。如果您注意到了,我使用了
org.apache.commons
中的
IOUtils.copy()
来复制流,但您可以按照自己的喜好来做。在视图中,链接如下所示:

<html>
<head>
    <title></title>
</head>
<body>
  <a href="/download/${uniqueString}">Download</a>
</body>
</html>


这只是基本思想的证明。所有细节都由你决定

@Fr0stDev1似乎是这样。至少我没有在Spring框架中看到这个任务的“随时可用”解决方案。
<html>
<head>
    <title></title>
</head>
<body>
  <a href="/download/${uniqueString}">Download</a>
</body>
</html>