我想实现一个公共/全局变量,以便我可以从 spring 项目的任何层(控制器/服务/dao)访问。例如
class Abc{
public User user;
public String subdomain;
}
现在我想从任何层获取用户、子域值。但请记住,我的项目有用户管理。所以我需要为每个用户会话指定特定的值。
笔记:
- 这个值的生命周期是会话
- 这不是所有用户的单音
- 这是每个会话特定的
谢谢
我想实现一个公共/全局变量,以便我可以从 spring 项目的任何层(控制器/服务/dao)访问。例如
class Abc{
public User user;
public String subdomain;
}
现在我想从任何层获取用户、子域值。但请记住,我的项目有用户管理。所以我需要为每个用户会话指定特定的值。
笔记:
谢谢
一个可能的解决方案是让服务能够查找当前登录的用户,并提供您需要的上下文信息。正如@siledh 提到的,一旦你有了这些信息,你就可以将它传递到你不希望有任何上下文概念的层中(例如在你的 DOA 中)
@Service
public class ContextService {
public User getLoggedOnUser() {
// Get user id/username from Spring Security principal
// Use id/username to lookup the User
// Return the logged on user
}
}
@Controller
public class SomeController {
@Autowired
private ContextService context;
@Autowired
private SomeReposity someReposity;
@RequestMapping("/home")
public String homePage() {
User loggedOn = contextService.getLoggedOnUser();
String userInformationNeededForHomePage =
someReposity.findSomethingForUser(loggedOn);
...
}
}
@Repository
public class SomeReposity {
public String findSomethingForUser(User user) {
// find something
}
}