2012-05-15 51 views
3

这可能是一个新手问题。弹簧:存储和使用Sitemesh装饰器中的对象

我有一个表用户,其中包含有关登录,通过和权限的信息。根据权限或角色,可以在以下任一项中找到有关每个用户的详细信息:教师,学生,家长。当用户登录时,存储在USER表中的信息可以很容易地从安全上下文中获取。

我想在登录后在标题中始终显示名字和姓氏 - 这些可以从其他表中获取。

我的问题是:我如何处理会话中的这些对象的所有时间?或者可以存储用户(它在春季存储),然后在每次需要详细信息时获取特定表格?

我使用spring security 3,hibernate,jsp,sitemash。

更多的澄清:

我知道如何处理登录的用户,并限制某些内容。登录详细信息(id,pass,role)存储在USER表中,这没关系 - 我可以取它并显示我想要的任何信息。问题在于有关特定用户的详细信息(地址,姓名,电子邮件等)存储在另一个表(学生,教师,家长 - 取决于USER表中的角色)中。这就是我想要在每一页上都知道的 - 例如显示他/她的名字。

+0

您是否已经自行加载用户数据?如果是这样,为什么不一次性加载所有你需要的信息(根据权限做一个单独的查询),然后把它作为一个自定义用户对象加以整理,作为安全上下文主体对象存储? –

+0

是的,我正在从用户自己加载数据。你的意思是我应该扩展用户类,添加几个字段,并像现在一样使用它? 目前,我有这样的: 用户=新用户(用户名,dbUser.getHaslo(),真的,真的,真的, \t \t \t \t \t真实的,补助金); 所以basiclly只有这个构造函数会变成我要实现的那个,它会工作吗?无论如何,我会检查它tmrw并标记答案:) –

+0

好的,我做了,但使用身份验证auth = SecurityContextHolder.getContext()。getAuthentication()...我只能获取登录的用户名和权限。我扩展了org.springframework.security.core.userdetails.User并添加了两个字段 - 名称和姓氏。但仍然不知道如何将其传递给模型。像上面这样做只允许我使用getName()(例如登录)。仍然无法访问添加的字段 –

回答

1

将其缩短 - 1.您需要扩展spring用户以提供其他字段。你需要实现UserDetailsS​​ervice接口并在安全上下文中引用它。 3.现在你可以像这样在一个控制器中获取你的对象:authentication.getPrincipal() - 记住转换为你的类型。

另外 - 我个人总是拥有AbstracController,它是我项目中每个控制器的基础。除此之外,我还有返回当前委托人的方法。