0

我想实现一个公共/全局变量,以便我可以从 spring 项目的任何层(控制器/服务/dao)访问。例如

class Abc{
    public User user;
    public String subdomain;
}

现在我想从任何层获取用户、子域值。但请记住,我的项目有用户管理。所以我需要为每个用户会话指定特定的值。

笔记:

  • 这个值的生命周期是会话
  • 这不是所有用户的单音
  • 这是每个会话特定的

谢谢

4

1 回答 1

0

一个可能的解决方案是让服务能够查找当前登录的用户,并提供您需要的上下文信息。正如@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
    }
}
于 2013-10-28T08:47:02.927 回答