如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是不是强制转换为获取对象?

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 相互聊天。 好的,如你所愿。我的答案适用于会话和请求。

以上是关于如果我有一个加载用户对象的处理程序拦截器,将其添加到请求属性,我是不是强制转换为获取对象?的主要内容,如果未能解决你的问题,请参考以下文章

休眠拦截器 - 加载事件之后

springsecurity添加过滤器怎么针对资源拦截

Node API - 在处理任何请求之前执行 GET 请求

处理推送通知

AOP Ninject 停止被调用的拦截方法

struts2在struts.xml中为所有动作类添加拦截器