在shiro中,以什么区分不同的subject?
在web应用中,当前端来了一个访问,shiro通过什么东西判断,这个访问是否与之前的某个访问是同一个用户,并且该用户是验证通过的?
shiro整合jwt环境下,是不是每次访问都会生成新的subject,并进行用户token认证?也就是每次访问都执行doGetAuthenticationInfo方法。
在shiro中,以什么区分不同的subject?
在web应用中,当前端来了一个访问,shiro通过什么东西判断,这个访问是否与之前的某个访问是同一个用户,并且该用户是验证通过的?
shiro整合jwt环境下,是不是每次访问都会生成新的subject,并进行用户token认证?也就是每次访问都执行doGetAuthenticationInfo方法。
关注参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在Apache Shiro 中,Subject 表示当前的“用户”操作环境,它可以是一个人,也可以是第三方服务等。Shiro区分不同的Subject主要通过以下方式:
会话(Session)管理:在Web应用中,默认情况下,Shiro通过Servlet容器(如Tomcat)或自定义的Web Session管理机制来跟踪用户的会话。当一个前端访问请求到达时,Shiro会检查请求中携带的Session ID,并根据这个ID从后端存储(如内存、数据库或分布式缓存如Redis)中获取对应的Session对象。Session中通常会保存有经过验证和授权后的Subject信息,这样就能判断出这次请求与之前的某个访问是否为同一个已验证过的用户。
认证信息(Principal):每个Subject都有一个关联的Principal,它代表了Subject的身份标识,比如用户名或用户ID。在每次请求中,Shiro都会基于提交的凭证(如用户名/密码对、JWT token等)去验证Subject身份,如果验证成功,则将该Subject与相应的认证信息绑定到会话中。
Token/凭证(Credentials):整合JWT时,Shiro可以通过解析请求头中的JWT Token来创建Subject,并在doGetAuthenticationInfo方法中执行JWT Token的验证。JWT包含了用户身份和其他可能需要的权限信息,这些信息都是加密且带有签名的,因此每次请求都必须携带有效的JWT Token才能通过认证。
在Shiro整合JWT的环境下:
doGetAuthenticationInfo方法确实会在每次需要认证的时候执行,但并不意味着每次都创建新Subject,而是针对每个请求重新验证提供的JWT Token的有效性及其中包含的用户信息。如果Token有效,则返回已存在的Subject,否则拒绝访问或重新引导用户登录。