Shiro文档说,
" Shiro通过自己的框架集成代码基于当前正在执行的Thread获取Subject数据,这是使用Shiro的首选方式"
如果Shiro从当前正在执行的线程中获取主题,并且Netty使用1个线程处理超过1个请求。那么,主题方法如何返回给定请求的主题信息?如果Shiro没有处理这种情况,我是否需要添加额外的机制来实现这一目标?
感谢。
答案 0 :(得分:0)
我不知道netty是如何工作的,但是如果你可以使用Filters配置它,shiro将确保在请求结束时清除threadlocal信息。
如果您不能使用过滤器,您可能会自行处理在线程上放置/删除主题的操作。
Shiro使用ThreadContext类: http://shiro.apache.org/static/1.2.3/apidocs/org/apache/shiro/util/ThreadContext.html
方法ThreadContext.bind(securityManager)和ThreadContext.bind(subject)是关键方法。线程完成后,调用ThreadCOntext.remove()。
如果您查看此页面,您会在单元测试期间看到正在运行的主题内容:http://shiro.apache.org/testing.html