【发布时间】:2016-01-27 06:11:27
【问题描述】:
我正在开发一个 Struts2 + Hibernate + Spring 应用程序。我正在尝试将用户权限加载到我的会话中,以便将它们恢复到特定的 jsp 中。
工作流程是这样的:
- 用户登录
- 用户组由休眠急切加载
这是来自User 类的代码。
@JoinColumn(name = "id_user_group", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = UserGroup.class)
public UserGroup getUserGroup() {
return userGroup;
}
- 我从用户组恢复另一个 EAGER 关系
这是来自UserGroup类的代码
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "user_section_permission", joinColumns = {
@JoinColumn(name = "id_user_group", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "id_section_permission",
nullable = false, updatable = false)})
public List<SectionPermission> getSectionPermissions() {
return sectionPermissions;
}
- 用户已保存到会话中。当登录操作将用户重定向到他的仪表板时,会调用
refreshPermissions方法
代码如下:
UserGroup userGroup = ((User) session.get("user")).getUserGroup();
Map<String, Section> permissions = new HashMap<>();
List<SectionPermission> sectionPermissions = userGroup.getSectionPermissions();
for (SectionPermission sectionPermission : sectionPermissions) {
permissions.put(sectionPermission.getCode(), sectionPermission.getSection());
}
session.put("permissions", permissions);
我认为很容易理解,我只是用权限代码和他的相关部分创建了一个地图(为了填充菜单等等。
现在问题...我的tomcat显示权限属性为空
但神奇的是,如果我在 for 循环中添加 LOG.debug("Perm: {}", new Object[]{sectionPermission.getCode(), sectionPermission.getSection()});,那么权限就会出现......
发生了什么事?我在使用 Hibernate 或 Spring 时做错了吗?
【问题讨论】:
标签: java spring hibernate tomcat struts2