Spring Security:如何让用户打开任何页面的监听器?
Posted
技术标签:
【中文标题】Spring Security:如何让用户打开任何页面的监听器?【英文标题】:Spring Security: how to make listener for opening any page by user? 【发布时间】:2012-11-19 11:31:10 【问题描述】:当用户尝试加载某些页面时,我需要随时处理用户的请求。在这个监听器中,我需要进行一些特殊检查,结果是关闭或不关闭用户的会话。我应该如何实现这个?看起来像是一项常见的任务,但我对 spring 和 spring 安全性很陌生。
【问题讨论】:
什么样的支票?也许一个 servlet 过滤器就足够了? 检查数据库。换句话说,我需要实现一些我的代码,这些代码应该在用户尝试执行某些操作时执行。现在我正在尝试使用自定义类扩展 WebContentInterceptor 并在 preHandle 方法中插入检查。但它不起作用。 【参考方案1】:我认为你应该尝试拦截器。更多细节:
创建HandlerInterceptor
类
在 servlet-context.xml (ApplicationContext for Servlet) 文件中定义拦截器public class RequestInitializeInterceptor implements HandlerInterceptor @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception //Code to perform database checks
<mvc:interceptors> <mvc:interceptor> <!-- Update path as per you requirement --!> <mvc:mapping path="/**"/> <bean class="com.abc.web.support.RequestInitializeInterceptor" /> </mvc:interceptor> </mvc:interceptors>
【讨论】:
【参考方案2】:就像 Lithium 所说,过滤器应该适合处理给定的任务。 Spring Security 使用它自己的filter chain(链接指向 3.1.x 文档),您可以向其中添加自己的过滤器 - 请注意过滤器在链中的位置,here 是有关订购的一些说明。
根据您的要求,例如,这样的过滤器可以将用户重定向到另一个页面,而不是请求停止执行过滤器链 - 再次:在过滤器链中定位是至关重要的。
【讨论】:
【参考方案3】:我认为听众是观察行为但不影响行为的东西。既然你提到关闭用户的会话,这肯定会影响用户。因此,我认为您在谈论拦截器/过滤器而不是侦听器。
Spring 为这样的事情提供了一个很好的拦截器框架。
但是,由于您在谈论会话,因此这是 Spring Security 的领域。看起来这里还有另一种处理会话管理的方法:Is it possible to invalidate a spring security session?
【讨论】:
以上是关于Spring Security:如何让用户打开任何页面的监听器?的主要内容,如果未能解决你的问题,请参考以下文章