java - Spring框架,我需要一个变量来依赖会话
问题描述
我正在制作一个简单的文件服务器应用程序。该应用程序正在扫描文件的当前位置并将它们显示给用户。
我需要一个变量,即会话本地的当前路径。我想避免一个用户将目录更改为另一个用户的情况。
原样:
User1 正在打开主页(当前位置 Z:/),user1 正在将目录更改为 Z:/foo,User2 正在打开主页,他的主页是 Z:/foo。
成为:
User1 正在打开主页(当前位置 Z:/),user1 正在将目录更改为 Z:/foo,User2 正在打开主页,他的主页是 Z:/,但 User1 仍在 Z:/foo
我试图使用@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
但是要么我(在编码方面)犯了一些错误,要么它对我不起作用
解决方案
您必须创建单独的会话范围 bean 并在需要会话范围数据时注入它 - 即使在应用程序范围 bean 中也是如此。例如
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class UserSpace{
private File userRoot=....somehow set that on bean creation - eg at @PostConstruct
.....other fields if needed
}
接着
@Service
class YoutService{
@Autowired
private UserSpace userSpace;// this will be session scoped proxy
}
推荐阅读
- android - SQLite 查询适用于 android 4.4,但在 android 5.0 上崩溃
- python - 仪表板显示空白图
- ruby-on-rails - 如果未启用复选框,则禁用 form_tag 的提交按钮
- sql-server - SQL Server 2014 错误:对象引用未设置为对象的实例
- emacs - Lisp 执行顺序和异步调用过程
- python - 在 django 中向 ModelForm 重复输入错误消息
- abap - 今天改变了什么 ABAP 对象?
- html - HTML 输入数字类型指定第一个值
- java - Vaadin Table.setCurrentPageFirstItemId 不适用于 Chrome
- font-face - EmojiOne 字体不起作用