春季安全/ JSF / Hibernate的意外会话劫持Tomcat上?(Spring Securi

2019-07-19 19:32发布

很奇怪的东西和尴尬发生在我身上有一天,我没有话来描述发生了什么。

我的应用程序运行春天3 JSF 2.1,Hibernate的4个集成,Spring Security的所有Tomcat上7.我通过电话与某人从C级重要,我们都在同时在同一时间在同一页上的测试环境。 他去导航到我在几乎同一时刻导航到时,他的页面想出了我的个人帐户信息的页面。 我不相信他,所以我走到他的办公室,果然,他莫名其妙地被登录为我的帐户,他没有密码。

该应用程序将保护了患者的健康信息,所以我奉命提供C级的全面报告与发生了什么事,但我怎么也找不到,这是可能的。 我走遍了代码库,并与一无所获。 我试图复制在多个场合的确切的情况,并没有能够重现它。 我甚至没有一个受过教育的猜测,我很高兴。

我想也许有可能是存储在Tomcat应用程序上下文实现会话一些不安全的线程操作,但我没有办法来证明这一点,如果它是不可重复的。 我还认为,因为春季安全作为领先于其他请求并转发,也许其他的Servlet过滤器的一个干扰的筛选工作。 另外两个分别在Primefaces文件上传过滤器,而且我最近增加了Omnifaces SEO过滤器。

该Omnifaces过滤并在事实上干扰了Primefaces文件,我与它的配置鼓捣所以他们两个会发挥不错相互上传过滤器,所以我还是觉得这可能是一种可能性了。

有没有使用Spring Security的任何已知的bug造成类似的问题? 是否有已知的使用Tomcat就不慎从ApplicationContext的服务错误的会话状态的问题? 有其他人遇到了类似的问题,还是有一些独特的见解呢?

编辑:发布不久后,这个我发现这一点,只公布前几天:

会议混淆-阿帕奇的httpd的mod_jk用,Tomcat的,春天的安全性-其他用户的数据服务

这几乎是完全一样的设置为我的Apache httpd的+ mod_jk的插件在Tomcat中的前面,所以我肯定是不是疯了:)

更新:

我能够重现该问题在我,而不在前面的mod_jk或Apache的开发环境,这样我就可以可靠地排除这种的罪魁祸首。

Answer 1:

我想到了 :)

这是不大不小的开发商错误的,但它也是春天的一个可笑的默认行为。 我有托管Bean一个JSF叫的SessionBean,我声明@SessionScope 。 当您集成JSF和Spring使用Spring依赖注入的JSF的依赖注入的冲突,所以春季是改写了该处理只是扭簧DI代替JSF组件。 所以,当我宣布一个JSF ManagedBean为会话范围,我还必须给它一个@Controller注解,以便它是作为公认为一个Spring bean。

原来,春节不但是了解JSF @RequestScoped@SessionScoped注解。 Spring有自己的注解简称@Scope(value = "request|session|singleton?|etc...")

因为Spring没有认识到JSF范围,我设置,它处理新创建的bean在其默认豆类,作为一个单例。

所以每次有人登录时,它被overrwriting我用来缓存登录的用户,我从校长的身份验证获取的财产。 然后,大家谁做了什么被登录为不同的用户。

通过警告你 ,你错误地配置了你那该死的bean的方式尼斯春天。

感谢各位的帮助,我希望这有利于未来的游客!



文章来源: Spring Security/JSF/Hibernate Accidental Session Hijacking on Tomcat?