【问题标题】:functions before handlers spring 3处理程序spring 3之前的功能
【发布时间】:2013-01-12 00:54:36
【问题描述】:

我是 Spring 和一般框架中的新手 ...

我想在几乎每个处理程序中执行一些代码行。 例如,我将我的数据库会话和经过身份验证的用户保存为 httpSession 属性,并且对于我的大多数处理程序,我都有:

@RequestMapping(....)
public ModelAndView get(HttpSession ses){
   User u = ses.getAttribute("currUser");
   DBsession session = ses.getAttribute("DBsession");
   if( u==null ) new ModelAndView("redirect:login");
   ...
}

spring 有什么方法可以为我做到这一点并直接获取 DBsession 和经过身份验证的 User 对象作为处理程序参数?

@RequestMapping(....)
public ModelAndView get(User u, DBsession session ){
   ...
}

【问题讨论】:

  • 你的意思是像拦截器或过滤器?
  • @Dave 也许是,但我不确定...是否有任何示例链接?
  • @Jesse 我的 dbsession 不是请求参数,它是每次创建 httpSession 时生成的对象......与请求无关

标签: java spring spring-mvc spring-security


【解决方案1】:

执行此操作的正确方法是使用自定义WebArgumentResolver,它干净地扩展@RequestMapping 带注释的处理程序方法来解析参数。我使用这种机制来处理干净地合并 JPA 实体并将它们传递给我的控制器。

您可以看到这样做的示例 herehere 或 Google 了解更多信息,有很多。

【讨论】:

  • 非常感谢!这将通过传递“准备使用”参数来解决大部分“问题”......另一部分(完成“请求预处理”)正在重定向到未经过身份验证的用户的登录页面。有什么解决办法吗?
  • 为此,您可能需要根据您的具体要求使用 servlet 过滤器或 Spring 拦截器,这与我在此处描述的部分完全不同。在我看来,它们是非常不同的问题,每个问题都使用不同的技术来解决。对于身份验证等,我个人倾向于使用 Spring Security,除非有令人信服的理由不使用它。
  • 看来我有很多东西要学 :p ... 任何有关 spring 安全性、servlet 过滤器和拦截器的好链接将不胜感激...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多