shiro是通过过滤器来获取用户登录信息并储存到threadlocal中的么?那具体是那个过滤器呢?或者说shiro的过滤器底层原理是什么
时间: 2024-01-10 13:04:35 浏览: 44
Shiro 使用过滤器来获取用户登录信息并存储到 ThreadLocal 中。具体来说,Shiro 的过滤器链是通过 Servlet 容器(如 Tomcat)中的 Filter 进行拦截和处理的。
在 Shiro 中,有一个名为 `ShiroFilter` 的过滤器,它是整个 Shiro 过滤器链的入口点。当请求到达时,Servlet 容器会将请求交给 `ShiroFilter` 进行处理。
`ShiroFilter` 会根据配置的 URL 规则和拦截器链进行判断和处理。其中,拦截器链中的一些特定的过滤器负责获取用户登录信息,并将其存储到 ThreadLocal 中。
具体来说,`UserFilter` 是 Shiro 提供的一个过滤器,它负责获取用户的身份信息并存储到 ThreadLocal 中。当请求经过 `UserFilter` 时,它会从请求中解析出用户的身份信息(如 Cookie、Token 等),然后将其封装成一个 `Subject` 对象,并将该对象存储到 ThreadLocal 中。
`UserFilter` 是 Shiro 过滤器链中的一个关键组成部分,用于实现用户身份认证的功能。当其他组件需要获取当前用户对象时,可以通过 `SecurityUtils.getSubject()` 方法从 ThreadLocal 中获取。
总结起来,Shiro 使用过滤器来拦截请求并进行身份认证和授权操作。其中的特定过滤器(如 `UserFilter`)负责获取用户登录信息,并将其存储到 ThreadLocal 中,以便后续的请求处理过程中可以方便地获取当前用户对象。这样可以保证在整个请求处理过程中,可以便捷地访问和操作用户信息。