如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是不是强制转换为获取对象?
Posted
技术标签:
【中文标题】如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是不是强制转换为获取对象?【英文标题】:If I have a handler interceptor that loads a user object, adds it to request attri, do I cast to get object?如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是否强制转换为获取对象? 【发布时间】:2011-03-18 05:31:37 【问题描述】:我计划创建一个 Handler 拦截器,它将在控制器被调用之前触发(或者我将执行此操作前触发)。
然后我会检查用户的 cookie,并根据 cookie 中的 sessionid 加载用户对象。
然后我会将用户对象添加到请求属性中。
现在,如果我想在我的控制器操作中检索用户对象,是否将其强制转换为 (User) ?
我相信我的 freemarker 模板可以做到 $user.name 正确吗?还是 user.getUsername ?
【问题讨论】:
【参考方案1】:首先,您最好将用户置于会话中,这样cookie > 用户转换不会发生在每个请求上。
其次,您可以通过调用从那里(会话/请求)获取它
User user = (User) session.getAttribute(USER_KEY); // this is s String constant
或者,您可以创建一个 UserHolder
类,在其中传递一个 HttpSession
,它会为您提供用户,从而避免在控制器中进行强制转换。
HttpServletRequest
可以使用相同的方法。
【讨论】:
我不想使用会话,因为这是分布式应用程序,它不能依赖与同一台服务器通信。 可以,这叫会话复制;) 我宁愿使用带有 sessionID 路由的 cookie,它的可扩展性更高,更不容易出错,并且不需要 JVM 相互聊天。 好的,如你所愿。我的答案适用于会话和请求。以上是关于如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是不是强制转换为获取对象?的主要内容,如果未能解决你的问题,请参考以下文章